2013-09-26 5 views
0

Я запускаю приложение Java в JBoss, которое периодически берет на себя задачу, требующую большой памяти. Объем памяти, используемый org.jboss.Main увеличивается в течение этого времени, но не падает после завершения задачи. Я профилировал процесс с помощью VisualVM и заставил сборку мусора. Память, используемая org.jboss.Main остается около 1 ГБ. Основная информация о дампе кучи следующая.JBoss не освобождает память

Total bytes: 53,795,695 
Total classes: 5,696 
Total instances: 732,292 
Classloaders: 324 
GC roots: 2,540 
Number of objects pending for finalization: 0 

Я также изучил классы, используя память, и обнаружил, что char [] учитывает большую часть памяти.

Может ли кто-нибудь сказать мне, почему VisualVM показывает в 20 раз меньше памяти, используемой JBoss, чем мой монитор активности? И если бы кто-нибудь мог дать какие-либо советы или указания для дальнейшего чтения о том, как заставить JBoss освободить память после завершения работы, что было бы весьма признательно.

ответ

1

VisualVM показывает размер кучи после полного GC. Это объем данных, которые вы можете использовать до того, как куча будет расти.

Сброс кучи показывает вам, какая часть кучи используется в настоящее время.

+0

Спасибо за быстрый ответ Peter. Вы имели в виду, что «Монитор активности показывает размер кучи после Full GC». Поэтому я мог бы использовать до 1 ГБ, прежде чем куча должна стать больше? И означает ли это, что существовал момент, когда дамп кучи отображал нечто вроде «Всего байтов: 1 000 000 000». – elo96

+0

Был момент, когда куча выросла из-за того, что вы распределяли объекты. GC пытается предсказать, какой размер может потребоваться, и поэтому он, возможно, не использовал все 1 ГБ. Примечание: каждый регион, Иден, оставшиеся в живых и занятые пространства независимо друг от друга. Я ожидаю, что Eden будет заполнен в какой-то момент, оставшиеся в живых попытаются полностью заполнять 50%, а на данный момент они могут быть заполнены на 40%. –

+0

Спасибо за разъяснение. Я также буду немного читать по регионам памяти. Один последний вопрос: я замечаю, что память в Activity Monitor колеблется с течением времени, но в соответствии с этим [thread] (http://www.coderanch.com/t/202451/Performance/java/JVM-memory-releasing) это должен только расти и не падать. Почему я вижу, что это колеблется? – elo96

Смежные вопросы