问题: 我已经设置了Xms512m和Xmx1024m来运行应用程序,该程序内部使用C++本地层执行其他操作,但是当运行应用程序时,我遇到了OutOfMemory异常。 我需要知道C ++使用哪个内存(即从分配的内存Xms512m和Xmx1024m中使用还是使用其他内存)。
如何在分别运行Java和C ++代码时获取堆空间和栈空间。
问题: 我已经设置了Xms512m和Xmx1024m来运行应用程序,该程序内部使用C++本地层执行其他操作,但是当运行应用程序时,我遇到了OutOfMemory异常。 我需要知道C ++使用哪个内存(即从分配的内存Xms512m和Xmx1024m中使用还是使用其他内存)。
如何在分别运行Java和C ++代码时获取堆空间和栈空间。
使用jmap获取堆转储数据。qty:~ qrtt1$ jps 4437 start.jar 10470 Jps
使用垫子打开它,就像这样:jmap -dump:format=b,file=my_app_heap_data.hprof 4437
分配给JVM的内存和JNI以及本地应用程序使用的内存是完全不同的。像VisualVM和Jprofiler这样的工具可以帮助您确定JVM特定的堆使用情况。但是,如果内存泄漏来自JNI或本地应用程序,则应使用诸如-Xrunjnichk(在IBM JDK上可用)之类的选项来调试JNI调用。