JVM - 內存溢出,問題查找

當內存溢出會拋出 java.lang.OutOfMemoryError: Java heap space 的異常,那這個時候怎樣去分析到底哪裏導致內存溢出呢?

我們可以通過在vm的參數, -XX:+HeapDumpOnOutOfMemoryError 記住這個理是大寫XX。

當內存溢出後,顯示

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid1034.hprof ...
Heap dump file created [136202426 bytes in 0.908 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3210)
    at java.util.Arrays.copyOf(Arrays.java:3181)
    at java.util.ArrayList.grow(ArrayList.java:261)
    at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
    at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
    at java.util.ArrayList.add(ArrayList.java:458)
    at test.a.Test.main(Test.java:11)

然後可以在項目下,找到上面所指的文件,這裏的文件叫,java_pid1034.hprof

直接打開是無法知道里面是什麼意思,所以需要eclipse提供的一些工具來進行分析, 可以在網上搜索Eclipse Memory Analysis,或者在Eclipse Market哪裏搜索直接下載相關插件就可以了

下面來看看是怎樣一個分析過程:

首先我們打開eclipse,雙擊項目下,剛纔的分析文件,就可以打開分析編輯器,點擊下圖中的按鈕,

 

在打開的樹種可以看到,其中某一項會佔據內存比較多的,如果繼續展開,會發現,這裏會告訴你,那一項會是佔據內存的主要原因,這裏可以清楚地看到,demo的這個對象,有很多,說明創建這個demo的對象,沒有被回收

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章