上一篇 <<<Java基礎(chǔ)-對(duì)象的引用類(lèi)型
下一篇 >>>JVM堆內(nèi)存溢出和內(nèi)存泄露問(wèn)題定位和解決
1.元空間(方法區(qū))溢出
1.1 錯(cuò)誤現(xiàn)象
java.lang.OutOfMemoryError: Metaspace
1.2 原因
方法區(qū)空間已滿(mǎn)
1.3 解決方案
調(diào)整方法區(qū)的配置,參照JVM性能調(diào)優(yōu)的評(píng)估指標(biāo)及調(diào)優(yōu)示例
2.棧內(nèi)存溢出
2.1錯(cuò)誤現(xiàn)象
java.lang.StackOverflowError
2.2代碼演示
public static void count(){
try {
count++;
count();
} catch (Throwable e) {
System.out.println("最大深度:"+count);
e.printStackTrace();
}
}
執(zhí)行結(jié)果
默認(rèn)最大深度:11478
設(shè)置最大調(diào)用深度:-Xss5m
最大深度:254422
設(shè)置最大調(diào)用深度:-Xss10m
最大深度:586522
2.3產(chǎn)生原因
- 大多是存在遞歸代碼,當(dāng)線(xiàn)程請(qǐng)求的棧深度大于虛擬機(jī)所允許的深度,則拋出StackOverflowError異常;
- 如果虛擬機(jī)??梢詣?dòng)態(tài)擴(kuò)展,在擴(kuò)展時(shí)無(wú)法申請(qǐng)到足夠的內(nèi)存,就會(huì)拋出OutOfMemoryError異常
2.4如何避免
a.增加棧內(nèi)存
b.減少遞歸深度調(diào)用 通過(guò)一定條件退出
相關(guān)文章鏈接:
<<<JVM整體內(nèi)存結(jié)構(gòu)的圖解,直觀(guān)明了
<<<javap命令查看對(duì)象信息及操作方法在JVM層的實(shí)現(xiàn)原理
<<<javap命令反查匯編指令匯總
<<<ClassLoader類(lèi)加載器順序Demo測(cè)試與雙親委派源碼解讀
<<<自定義SPI和熱部署技術(shù)破壞類(lèi)加載器的雙親委派模式
<<<JVM中對(duì)象如何完成空間分配和初始化工作
<<<JVM堆內(nèi)存溢出和內(nèi)存泄露問(wèn)題定位和解決
<<<JVM常見(jiàn)死鎖問(wèn)題產(chǎn)生原因和多種診斷方式
<<<服務(wù)器CPU飆升為100%問(wèn)題排查及如何避免
<<<JVM內(nèi)存診斷命令和排查工具匯總
<<<JVM新生代老年代算法匯總圖解
<<<JVM垃圾回收不要手動(dòng)System.gc的真正原因
<<<JVM垃圾回收引用計(jì)數(shù)法和根搜索算法圖解
<<<JVM垃圾回收STW(Stop-The-World)代碼演示
<<<JVM垃圾回收器的發(fā)展歷程及使用場(chǎng)景匯總
<<<JVM串行并行垃圾回收器的關(guān)注點(diǎn)
<<<一張圖看懂CMS垃圾回收器的底層原理
<<<G1能作為JDK9默認(rèn)垃圾回收器的優(yōu)勢(shì)分析
<<<CMS和G1的漏標(biāo)問(wèn)題解決及三色標(biāo)記算法圖解
<<<GC中新生代進(jìn)入老年代的方式匯總
<<<GC常用日志參數(shù)配置及分析工具說(shuō)明
<<<FullGC、MinorGC、STW等常見(jiàn)問(wèn)題如何解答
<<<JVM性能調(diào)優(yōu)的評(píng)估指標(biāo)及調(diào)優(yōu)示例