2012-02-09 65 views
3

問題: 我已經爲運行的應用程序設置了Xms512m和Xmx1024m,該實例使用C++本機層執行其他操作,運行應用程序時出現OutOfMemory異常。我需要知道C++使用哪些內存(即來自分配的內存Xms512m和Xmx1024m,或者它使用的不是此設置的內存)。由java分配的內存

如何在單獨運行應用程序時爲Java和C++代碼獲取堆空間和堆棧空間。

回答

2

通過本機代碼分配的內存是不是在Java堆。您的OutOfMemory異常由Java應用程序引起。 OOM是一個線索,讓你知道Java應用程序可能使用超過1024MB的內存。您可以將其擴大或考慮內存泄漏問題。

大約有內存泄漏檢測一些鏈接:

你可以這樣做只是:

  • 獲得通過JPS
  • Java應用程序的PID
qty:~ qrtt1$ jps 
4437 start.jar 
10470 Jps 
  • 通過JMAP獲取堆轉儲數據
jmap -dump:format=b,file=my_app_heap_data.hprof 4437 
  • 使用墊打開它,像這樣:

mat

0

分配給您的JVM的內存以及JNI和本機應用程序使用的內存完全不同。 VisualVM和Jprofiler等工具可以幫助您確定JVM特定的堆使用情況。但是,如果內存泄漏來自JNI或本機應用程序,則應該使用諸如-Xrunjnichk(可在IBM JDK上獲得)之類的選項來調試JNI調用。