色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

JVM老年代內(nèi)存突然飚高

林國瑞2年前16瀏覽0評論

JVM老年代內(nèi)存突然飚高?

能定位到是JVM老年代內(nèi)存飆高,說明題主對JVM有了一定認(rèn)識并且可能對JVM分代回收機制也有了解。

因為老年代內(nèi)存存儲對象是新生代中通過多次mingc都沒有被釋放掉的對象(或者age達(dá)到一定值或者新生代內(nèi)存告急,導(dǎo)致頻繁mingc,GC的同時引發(fā)majGC)

我就簡單說一下在什么情況下可能產(chǎn)生老年代內(nèi)存突然飆高以及其原因:

可能原因死循環(huán)中不斷創(chuàng)建對象,導(dǎo)致Eden區(qū)內(nèi)存爆滿引起mingc,同時因為依然存在引用+新生代內(nèi)存空間不足引起頻繁mingc進(jìn)而age快速增大然后被放入老年代中,使得老年代內(nèi)存飆升。當(dāng)然飆升一次最多也就是新生代的內(nèi)存也就是1/3。載入大批量對象。這個大概率是從DB中獲取數(shù)據(jù)時未限制返回條數(shù)或者返回條數(shù)設(shè)置失效導(dǎo)致一個查詢導(dǎo)致內(nèi)存暴增,引起連鎖反應(yīng)如上。業(yè)務(wù)邏輯新增眾多靜態(tài)引用對象或者類引用(這個往往是外行或者新手或者一些理論還不錯的坑爹領(lǐng)導(dǎo)寫的代碼)。JVM分代內(nèi)存大小比例設(shè)置和當(dāng)前業(yè)務(wù)需求不匹配,可能項目業(yè)務(wù)需求已啟動就需要50M內(nèi)存空間而你只為新生代設(shè)置了60M內(nèi)存空間。解決方式

通過linux top和jmap -histo:live [pid] 命令快速定位大內(nèi)存代碼塊。不清楚的可以百度或者私信,手把手教會。

合理分配JVM堆內(nèi)存分代比例。可以通過簡單計算獲取服務(wù)器啟動所需內(nèi)存,再通過一定比例設(shè)置。這個比例大致相同但是也可能根據(jù)項目特色發(fā)生比較大的變化。比如老年代:新生代=2:1,Eden:A:B=8:1:1。這些都是可以調(diào)整的。

JAVA自動遞增,JVM老年代內(nèi)存突然飚高