Распределение памяти с помощью java

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

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


person Sagar Mali    schedule 09.02.2012    source источник


Ответы (4)


Память, выделенная собственным кодом, не находится в куче 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

person qrtt1    schedule 09.02.2012

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

person kosa    schedule 09.02.2012

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

person Chandra Sekhar    schedule 09.02.2012

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

person Deepak Bala    schedule 09.02.2012