1. 程式人生 > >HeapDumpOnOutOfMemoryError堆轉儲實踐和一些分析

HeapDumpOnOutOfMemoryError堆轉儲實踐和一些分析

程式碼1在迴圈中建立long[]例項時,上次迴圈建立的long[]例項沒有被引用,可以被垃圾回收掉,所以在引數Xmx40m下,程式碼1建立佔用32M記憶體的long[]還是可以正常執行的,試圖建立佔用64M記憶體的long[]才丟擲異常;程式碼2在迴圈中建立long[]例項時,上次迴圈建立的long[]例項還在被arr引用,不能被垃圾回收掉,程式碼2在建立佔用16M記憶體的long[]例項時,前一個迴圈建立的佔8M記憶體的long[]例項還不能被回收,8+16=24 < 40,所以這次能夠正常執行,下一個迴圈要嘗試建立佔32M記憶體的long[]例項,這時候佔16M記憶體的long[]例項還不能被回收,16+32=48>40
,堆記憶體不夠用,只好丟擲異常。