java的内存分配

时间:2012-02-09 04:56:16

标签: java c++ memory heap-memory stack-memory

问题:   我已经为运行应用程序设置了Xms512m和Xmx1024m,实习生使用C ++本机层执行其他操作,运行应用程序时出现OutOfMemory异常。我需要知道C ++使用哪个内存(即来自分配的内存Xms512m和Xmx1024m,或者它使用的不是这个设置的内存)。

如何在单独运行应用程序时获取Java和C ++代码的堆空间和堆栈空间。

4 个答案:

答案 0 :(得分:2)

本机代码分配的内存不在Java堆中。您的OutOfMemory由Java应用程序引起的异常。 OOM是一个线索,可以让您了解java应用程序可能使用超过1024mb的内存。您可以将其扩大或考虑内存泄漏问题。

有一些关于内存泄漏检测的链接:

你可以做到这一点:

  • 通过jps获取java app pid
qty:~ qrtt1$ jps
4437 start.jar
10470 Jps
  • 通过jmap获取堆转储数据
jmap -dump:format=b,file=my_app_heap_data.hprof 4437
  • 使用垫子打开它,如下:

mat

答案 1 :(得分:1)

您可以使用jconsoleVisualVM 查看应用程序的堆使用情况。

答案 2 :(得分:1)

您可以使用以下监控应用程序:
jconsole
javamelody
visualvm

答案 3 :(得分:0)

分配给JVM的内存以及JNI和本机应用程序使用的内存完全不同。 VisualVM和Jprofiler等工具可以帮助您确定JVM特定的堆使用情况。但是,如果内存泄漏来自JNI或本机应用程序,则应使用-Xrunjnichk(可在IBM JDK上提供)等选项来调试JNI调用。