Ограничить использование памяти Java-классом - PullRequest
2 голосов
/ 03 июня 2011

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

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

Ответы [ 2 ]

3 голосов
/ 03 июня 2011

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

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

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

0 голосов
/ 03 июня 2011

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

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

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

...