問題: 我已經爲運行的應用程序設置了Xms512m和Xmx1024m,該實例使用C++本機層執行其他操作,運行應用程序時出現OutOfMemory異常。我需要知道C++使用哪些內存(即來自分配的內存Xms512m和Xmx1024m,或者它使用的不是此設置的內存)。由java分配的內存
如何在單獨運行應用程序時爲Java和C++代碼獲取堆空間和堆棧空間。
問題: 我已經爲運行的應用程序設置了Xms512m和Xmx1024m,該實例使用C++本機層執行其他操作,運行應用程序時出現OutOfMemory異常。我需要知道C++使用哪些內存(即來自分配的內存Xms512m和Xmx1024m,或者它使用的不是此設置的內存)。由java分配的內存
如何在單獨運行應用程序時爲Java和C++代碼獲取堆空間和堆棧空間。
您可以使用下面的監控應用:
jconsole
javamelody
visualvm
通過本機代碼分配的內存是不是在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
分配給您的JVM的內存以及JNI和本機應用程序使用的內存完全不同。 VisualVM和Jprofiler等工具可以幫助您確定JVM特定的堆使用情況。但是,如果內存泄漏來自JNI或本機應用程序,則應該使用諸如-Xrunjnichk(可在IBM JDK上獲得)之類的選項來調試JNI調用。