一.java.lang.OutOfMemoryError:Java heap space:
解決方法:
1.檢查程序,看是否有死循環或不必要地重複創建大量對象
2.修改這兩個參數來增加堆內存 -Xms3062m 設置堆初始內存 -Xmx3062m 設置堆最大內存
二.java.lang.OutOfMemoryError: PermGen space:
這種是方法區內存不夠,可通過調整JVM的配置:
-XX:MaxPermSize=128m
-XX:PermSize=128m
三.java.lang.StackOverflowError
這也內存溢出錯誤的一種,即線程棧的溢出,要麼是方法調用層次過多(比如存在無限遞歸調用),要麼是線程棧太小。
優化程序設計,減少方法調用層次;調整-Xss參數增加線程棧大小。
四.java.lang.OutOfMemoryError: Directbuffermemory
調整-XX:MaxDirectMemorySize=參數,如添加JVM配置:
-XX:MaxDirectMemorySize=128m 如果不指定,則默認與Java堆最大值(-Xmx)相同
五.java.lang.OutOfMemoryError:unable to create new native thread
本地方法棧空間不足以創建額外的線程,要麼是創建的線程過多,要麼是本地方法棧空間確實小了。
1.通過-Xss啓動參數減少單個線程棧大小,這樣便能開更多線程(當然不能太小,太小會出現StackOverflowError);
2.通過-Xms-Xmx兩參數減少Heap大小,將內存讓給Stack(前提是保證Heap空間夠用)。
注:本文彙總互聯網多篇文章與本人相關實踐經驗