1. 程式人生 > >Java堆溢位解決思路--OutOfMemoryError

Java堆溢位解決思路--OutOfMemoryError

通過引數-XX:+HeapDumpOnOutOfMenoryError可以讓虛擬機器在出現記憶體溢位異常時Dump出當前記憶體堆轉儲快照以便事後進行分析。

當出現Java堆記憶體溢位時,異常堆疊資訊Java.lang.OutOfMemoryError會跟著進一步提示Java heap space

要解決這個區域異常,一般的手段是先通過記憶體映像分析工具對Dump出來的堆轉儲快照進行分析,重點是確認記憶體中的物件昌否是必要的,也就是要先分清楚到底是出現了記憶體洩漏(Memory Leak)還是記憶體溢位(Memory Overflow)。

如果是記憶體洩漏,可進一步通過工具檢視洩漏物件到GC Roots的引用鏈。於是就能找到洩漏物件是通過怎樣的路徑與GC Roots引用鏈的資訊,就可以比較準確地定位出洩漏程式碼的位置。

如果不存在洩漏,換句話說,就是記憶體中物件確實都還必須存活著,那就應當檢查虛擬機器的堆引數(-Xmx與-Xms),與機器實體記憶體對比看是否還可以增大,從程式碼上檢查是否存在某些物件生命週期過長、持有狀態時間過長的情況,嘗試減少程式執行期的記憶體消耗。