Java-программа потребляет много памяти (в 1,5 раза больше Xmx) - PullRequest
1 голос
/ 04 ноября 2011

У меня есть одна Java-программа (много операций с памятью). Я выделил 10 ГБ кучи Java для процесса (-Xmx). Общий объем памяти системы составляет 30 ГБ. Java-программа фактически занимает почти 24 ГБ памяти (это видно из вывода svmon). Развертка кучи Java ниже 10 ГБ (из подробного GC). Хотелось бы узнать, для чего используется остальная часть памяти (24-10 = 14 ГБ памяти)? Это родная куча? (У меня нет никакого кода JNI или любого другого стороннего libray, который может использовать код JNI). Не могли бы вы рассказать, как я могу контролировать использование собственной памяти?

ОС: AIX

Java: IBM JVM 1.6

Процессор: Power 7 SMT -4

Ответы [ 4 ]

2 голосов
/ 04 ноября 2011

Другой тип памяти - это не куча памяти. Попробуйте отслеживать ситуацию с помощью JConsole .

На этой странице о YourKit Я прочитал:

Неправильный рост объема памяти без кучи может указывать на потенциальную проблему, в этом случае вы можете проверить следующее:

  • Если есть проблемы с загрузкой классов, такие как утечка загрузчиков. В этом случае проблему можно решить с помощью представления загрузчиков классов.
  • Если есть массивные строки, интернированные. Для обнаружения такой проблемы может использоваться запись распределения.
0 голосов
/ 04 ноября 2011

IBM JMAT - хороший инструмент, но для анализа достаточно много памятиНасколько вы уверены, что объем используемой памяти подходит для объектов, которыми вы управляете?С таким большим стеком вызовов я бы начал поиск утечек ссылок.

0 голосов
/ 04 ноября 2011

Спасибо за память.

Я просто положил это здесь: https://www.ibm.com/developerworks/java/library/j-nativememory-aix/

0 голосов
/ 04 ноября 2011

Вы использовали какой-либо профилировщик? это поможет вам точно определить, какие объекты потребляют память и что происходит в оперативной памяти

...