Java 分代回收

1、YGC做了哪些操作

Eden區(qū):
1)對(duì)象回收
2)存活對(duì)象 被復(fù)制到 Survivor區(qū)的"To"(age不加1)
Survivor的From:
(3)對(duì)象回收
存活對(duì)象
4)不滿足年齡條件的被復(fù)制到 Survivor區(qū)的“To”(age加1)
5)滿足年齡條件的移入年老代

2、GC中的一些點(diǎn)

1、Minor GC會(huì)一直重復(fù)這樣的過(guò)程,直到"To"區(qū)被填滿,會(huì)將所有對(duì)象移動(dòng)到年老代中。
2、動(dòng)態(tài)判斷對(duì)象的年齡。如果Survivor區(qū)中相同年齡的所有對(duì)象大小的總和大于Survivor空間的一半,
年齡大于或等于該年齡的對(duì)象可以直接進(jìn)入老年代。
3、空間分配擔(dān)保。每次進(jìn)行Minor GC時(shí),JVM會(huì)計(jì)算Survivor區(qū)移至老年區(qū)的對(duì)象的平均大小,
如果這個(gè)值大于老年區(qū)的剩余值大小則進(jìn)行一次Full GC,如果小于檢查HandlePromotionFailure設(shè)置,
如果true則只進(jìn)行Monitor GC,如果false則進(jìn)行Full GC。
4、當(dāng)使用G1,CMS 時(shí),F(xiàn)ullGC發(fā)生的時(shí)候 是 Serial+SerialOld。
當(dāng)使用ParalOld時(shí),F(xiàn)ullGC發(fā)生的時(shí)候是 ParallNew +ParallOld.

3、JVM參數(shù)

-XX:NewSize 設(shè)置年輕代的初始大小
-XX:MaxNewSise 設(shè)置年輕代的最大值
建議設(shè)為整個(gè)堆大小的1/3或者1/4,兩個(gè)值設(shè)為一樣大。

-XX:SurvivorRatio
設(shè)置Eden和其中一個(gè)Survivor的比值,默認(rèn)是8比1。

-Xmx 堆的最大值;
-Xms 堆的最小值;
兩個(gè)值最好設(shè)置為相等。

-XX:+PrintTenuringDistribution
用于顯示每次Minor GC時(shí)Survivor區(qū)中各個(gè)年齡段的對(duì)象的大小。

-XX:MaxTenuringThreshold和-XX:InitialTenuringThreshold
用于設(shè)置Survivor區(qū)對(duì)象晉升年老代中年齡的最小值和最大值

-XX:NewRatio=1
修改新生代和老年代之間的內(nèi)存比例;

4、1.6、1.7、1.8關(guān)于永久代的變化

移除永久代的工作從JDK1.7就開(kāi)始了。JDK1.7中,存儲(chǔ)在永久代的部分?jǐn)?shù)據(jù)就已經(jīng)轉(zhuǎn)移到了Java Heap或者是 Native Heap。
但永久代仍存在于JDK1.7中,并沒(méi)完全移除,譬如符號(hào)引用(Symbols)轉(zhuǎn)移到了native heap;
字面量(interned strings)轉(zhuǎn)移到了java heap;類的靜態(tài)變量(class statics)轉(zhuǎn)移到了java heap。

static String base = "string";
public static void main(String[] args) {
    List list = new ArrayList();
    for (int i=0;i< Integer.MAX_VALUE;i++){
        String str = base + base;
        base = str;
        list.add(str.intern());
    }
}
JDK 1.6 的運(yùn)行結(jié)果:PG SPACE
JDK 1.7 的運(yùn)行結(jié)果:java.lang.OutOfMemoryError: Java heap space 
JDK 1.8 的運(yùn)行結(jié)果:java.lang.OutOfMemoryError: Java heap space

可以大致驗(yàn)證 JDK 1.7 和 1.8 將字符串常量由永久代轉(zhuǎn)移到堆中。

5、Metaspace(元空間)

無(wú)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JVM 垃圾回收 寫在前面 本節(jié)常見(jiàn)面試題 問(wèn)題答案在文中都有提到 如何判斷對(duì)象是否死亡(兩種方法)。 簡(jiǎn)單的介紹...
    前端三少爺閱讀 118評(píng)論 0 0
  • 寫在前面 常見(jiàn)面試題: 如何判斷對(duì)象是否死亡(兩種方法)。 簡(jiǎn)單的介紹一下強(qiáng)引用、軟引用、弱引用、虛引用(虛引用與...
    程序猿天璇閱讀 1,286評(píng)論 2 9
  • 本小結(jié)將會(huì)以以下4個(gè)問(wèn)題進(jìn)行探討: 內(nèi)存是如何分配和回收? 什么樣的數(shù)據(jù)需要回收? 什么時(shí)候進(jìn)行回收? 內(nèi)存中的數(shù)...
    花神子閱讀 366評(píng)論 0 3
  • 今天感恩節(jié)哎,感謝一直在我身邊的親朋好友。感恩相遇!感恩不離不棄。 中午開(kāi)了第一次的黨會(huì),身份的轉(zhuǎn)變要...
    余生動(dòng)聽(tīng)閱讀 10,894評(píng)論 0 11
  • 彩排完,天已黑
    劉凱書(shū)法閱讀 4,490評(píng)論 1 3

友情鏈接更多精彩內(nèi)容