當前位置:名人名言大全網 - 笑話大全 - java.lang.StackOverFlowError如何解決具體的點?

java.lang.StackOverFlowError如何解決具體的點?

Java中幾種常見的內存溢出及其解決方法:

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參數以增加線程堆棧大小。