Java。lang . out memory錯誤:JavaHeapspace:這是因為Java堆中沒有足夠的內存。壹個原因是真實性不夠(比如遞歸層數太多等。),另壹個原因是程序中存在無限循環。
如果java堆內存不足,可以通過調整JVM的如下配置來解決:
-Xms3062m
-Xmx3062m
情況2
Java . lang . out of memory error:GCoverheadlimitexceeded
說明:JDK6增加了壹個錯誤類型,當GC占用大量時間釋放壹個小空間時拋出;壹般是因為堆太小,內存不夠。
解決方案:
1,檢查系統是否有代碼或無限循環使用大內存;
2.通過添加JVM配置來限制內存的使用:
-XX:-UseGCOverheadLimit
情況3:
Java。lang . out memory錯誤:permgenspace:這是P區內存不足,可以通過調整JVM配置來調整:
-XX:MaxPermSize=128m
-XXermSize=128m
註意:
JVM的Perm區主要用來存儲類和元信息。類加載的時候會放入PermGenspace,這個區域就變成老壹代了。GC在主程序運行過程中不會清理舊區,默認大小為64M。當程序要加載的對象很多時,超過64M就會報錯這部分內存溢出,所以需要增加內存分配,壹般128m就夠了。
情況4:
Java . lang . out of memory error:Directbuffermemory
Adjust -XX:MaxDirectMemorySize=參數,如添加JVM配置:
-XX:MaxDirectMemorySize = 128m
情況5:
Java . lang . out of memory error:unabletocreatenewnativethread
原因:沒有足夠的堆棧空間來創建額外的線程,要麽是創建了太多的線程,要麽是堆棧空間太小。
解決方案:由於JVM不提供設置總堆棧空間大小的參數,所以可以設置單線程堆棧的大小;系統總的用戶空間是3G,除了Text/Data/BSS/MemoryMapping幾個段,堆和棧空間總量有限,這是壹個權衡。所以這個誤差可以用兩種方法解決:1。通過-Xss啟動參數減小單線程棧的大小,這樣可以打開更多的線程(當然不能太小,stack overflow error);太小會出現);2.用兩個參數-Xms-Xmx減小堆大小,把內存給棧(前提是堆空間足夠)。
情況6:
java.lang.StackOverflowError
原因:這也是壹種內存溢出錯誤,即線程棧溢出,要麽是因為方法調用層次太多(比如無限遞歸調用),要麽是因為線程棧太小。
解決方法:優化程序設計,減少方法調用層次;調整-Xss參數以增加線程堆棧大小。