2012-04-28 64 views
1

在Java中,是否有可能準確找到java.lang.OutOfMemoryError發生的位置?確定OutOfMemory錯誤的位置

我期待更好地瞭解多少內存究竟是怎麼做我的應用程序了一個自稱是你可以趕上的OutOfMemoryError,並要求運行,如下圖所示未能

+1

它會拋出異常並轉儲堆棧跟蹤嗎?這應該告訴你到底發生錯誤時代碼的作用。 – 2012-04-28 16:46:38

+0

有點粗糙。在JVM中發生了很多事情,很難知道哪個線程是罪魁禍首。打破的線程不一定是吃掉所有內存的線程。 – 2012-04-28 16:46:49

+0

@AdamLiss問題不在於代碼出現問題的位置。問題是,對於應用程序,有多少內存「太多內存」 – JAM 2012-04-28 16:47:22

回答

2

之前。

try { 
    //... 
} catch (OutOfMemoryError er) { 
    // this will tell you how much you have used 
    long heapSize = Runtime.getRuntime().totalMemory(); 
    System.err.println("memory used "+heapSize); 
} 

,如果你不知道在哪裏在你的代碼就會失敗(OutOfMemoryError而應該當堆內存用完發生)

,你可以嘗試註冊一個關閉掛鉤,並輸出HEAPSIZE那裏。

+0

絕對是個好主意!謝謝布魯斯 – JAM 2012-04-28 17:21:52