2013-02-25 70 views
0

我想分析使用eclipse MAT應用程序的內存使用情況,因此我使用-XX:+HeapDumpOnOutOfMemoryError創建一個堆轉儲。現在,如果我在MAT中打開它,它會告訴我堆轉儲的大小爲127mb,這顯然不是萬能的,因爲jvm以-Xmx1024m運行。堆轉儲是不完整的

+1

什麼是確切的'OutOfMemoryError'您收到?你可以發佈堆棧跟蹤嗎?? – 2013-02-25 13:36:10

+0

是的,究竟是什麼?請注意,您可以爲堆內存以外的資源獲取「OutOfMemoryError」! (permgen是Oracle/Sun/OpenJDK JVM中的經典示例)。 – 2013-02-25 14:00:26

回答

0

通常有在Java虛擬機(育苗和堆)存儲兩個段,每一個都可以導致內存不足。因此,您不能斷定轉儲文件的大小應等於或超過-Xmx設置。

閱讀更多關於主題 - 例如在這裏:http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/garbage_collect.html

+0

該文檔是關於JRockit虛擬機(看起來並不是很新,因爲它從2008年開始)。垃圾收集的細節非常依賴於實現,所以這通常不適用於其他JVM。 – 2013-02-25 13:59:34

+0

同意。但是我最近在OutOfMemory上經歷了這個經歷,並且意外地發現了託兒所的概念。那麼,增加它的空間幫助我。我正在使用IBM JVM/Websphere,並使用-Xmn選項來設置託兒所空間。文章可能比較陳舊,但我相信它適用於許多現在的情況。但你是對的 - 這是非常特定於JVM的。 – tbsalling 2013-02-25 14:22:30