Распределение памяти по Java - PullRequest
3 голосов
/ 09 февраля 2012

Проблема: Я установил Xms512m и Xmx1024m для запуска приложения, которое использует внутренний уровень C ++ для выполнения других операций, я получаю исключение OutOfMemory при запуске приложения. Мне нужно знать, какая память C ++ использует (т.е. из назначенной памяти Xms512m и Xmx1024m или использует не эту установленную память).

Как получить пространство кучи и пространство стека для кода Java и C ++ при отдельном запуске приложения.

Ответы [ 4 ]

2 голосов
/ 09 февраля 2012

Память, выделенная собственным кодом, отсутствует в куче Java. Ваше исключение OutOfMemory, вызванное Java-приложением. OOM - это ключ к тому, чтобы дать вам знак того, что Java-приложение может использовать более 1024 Мб памяти. Вы можете увеличить его или рассмотреть проблему утечки памяти.

Есть несколько ссылок об обнаружении утечек памяти:

Вы можете сделать это просто:

  • получить pid приложения java от jps
qty:~ qrtt1$ jps
4437 start.jar
10470 Jps
  • получить данные дампа кучи по jmap
jmap -dump:format=b,file=my_app_heap_data.hprof 4437
  • используйте коврик, чтобы открыть его, вот так:

mat

1 голос
/ 09 февраля 2012

Вы можете использовать следующие приложения мониторинга: JConsole javamelody VisualVM

1 голос
/ 09 февраля 2012

Вы можете использовать jconsole или VisualVM , чтобы увидеть использование приложения в куче.

0 голосов
/ 09 февраля 2012

Память, выделенная вашей JVM, и память, используемая JNI и нативными приложениями, совершенно разные. Такие инструменты, как VisualVM и Jprofiler, могут помочь вам определить конкретное использование кучи JVM. Однако, если утечка памяти происходит из JNI или собственного приложения, вы должны использовать такие параметры, как -Xrunjnichk (доступно в IBM JDK) для отладки вызовов JNI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...