问题: 我已经为运行应用程序设置了Xms512m和Xmx1024m,实习生使用C ++本机层执行其他操作,运行应用程序时出现OutOfMemory异常。我需要知道C ++使用哪个内存(即来自分配的内存Xms512m和Xmx1024m,或者它使用的不是这个设置的内存)。
如何在单独运行应用程序时获取Java和C ++代码的堆空间和堆栈空间。
答案 0 :(得分:2)
本机代码分配的内存不在Java堆中。您的OutOfMemory由Java应用程序引起的异常。 OOM是一个线索,可以让您了解java应用程序可能使用超过1024mb的内存。您可以将其扩大或考虑内存泄漏问题。
有一些关于内存泄漏检测的链接:
你可以做到这一点:
qty:~ qrtt1$ jps 4437 start.jar 10470 Jps
jmap -dump:format=b,file=my_app_heap_data.hprof 4437
答案 1 :(得分:1)
答案 2 :(得分:1)
您可以使用以下监控应用程序:
jconsole
javamelody
visualvm
答案 3 :(得分:0)
分配给JVM的内存以及JNI和本机应用程序使用的内存完全不同。 VisualVM和Jprofiler等工具可以帮助您确定JVM特定的堆使用情况。但是,如果内存泄漏来自JNI或本机应用程序,则应使用-Xrunjnichk(可在IBM JDK上提供)等选项来调试JNI调用。