Ограничить использование памяти Java-классом

Я пишу Java-класс, который должен работать с Java MOA Framework. У класса есть функции для кластеризации потока точек. Этот класс вызывается приложением MOA. Я хочу ограничить общее использование памяти (по крайней мере, память, используемая в куче, может исключать память стека) использованием этого класса (исключая память, используемую приложением MOA).

Является ли это возможным? Я надеюсь, что ясно, что класс создается и вызывается приложением MOA. Сначала я запускаю приложение MOA, а затем выбрал запуск myclass из GUI для выполнения кластеризации. По этой причине параметры JVM, такие как -Xmx, не работают для меня.

2 ответа

Решение

Вы можете встроить логику в класс, чтобы проверять Runtime.freeMemory() и Runtime.maxMemory() через определенные промежутки времени и предпринимать шаги (очищать кэш и т. Д.), Когда лимит кажется близким. Немного "ненадежно", поскольку разные платформы по-разному отображают статистику кучи.

Вы также можете использовать схему SoftReference для некоторых ваших "необязательных" хранилищ. Тогда GC удалит объекты, если ему нужна куча. (Хотя эта схема использует кувалду, чтобы ударить комара.)

И вы можете, конечно, просто посчитать ваши объекты распределения.

Вы можете ограничить использование памяти глобально только для JVM.

Чтобы ограничить использование класса, вам нужно запустить другую JVM и использовать этот класс в новой JVM.

Однако обычно лучше исправить ваш код, чтобы класс никогда не использовал слишком много памяти.;)

Другие вопросы по тегам