2011-04-13 90 views
2

我們的代碼使用-XX:+ HeapDumpOnOutOfMemoryError標誌運行,所以我們在OOM上得到一個hprof文件。 最近我從安裝中得到這樣的文件,我用Eclipse內存分析器(MAT)打開它,我可以看到總大小爲46MB,如果進程是用-Xmx1024m啓動的,怎麼會這樣?爲什麼hprof文件比給jvm的內存量要小得多

不應該大小更接近最大分配大小?

這是與jdk1.6。

編輯:好的,現在我發現了一個similar question,事實上PermGen空間問題可能是原因,因爲我的過程已經連續23天了。我經常創建新線程(據我所知,可以正常結束),也許每秒一次。有人知道我能否以某種方式證實這一點?

回答

1

如果您未能創建非常大的對象,則會發生這種情況。即您創建失敗的對象不在轉儲中。

+0

yes我想到了這一點,但沒有其他提示,在這...看我的編輯,我在這裏找到一個相關的問題 – Persimmonium 2011-04-13 09:19:28

+0

確認原因最簡單的方法是讀取原始異常。例如「java.lang.OutOfMemoryError:Java heap space」,「java.lang.OutOfMemoryError:PermGen space」或「java.lang.OutOfMemoryError:Direct buffer memory」此外,堆棧跟蹤應該指出失敗的操作,它應該給你一個線索。 – 2011-04-13 09:23:34

+0

不幸的是我沒有發現任何異常 – Persimmonium 2011-04-13 09:37:42

相關問題