GC垃圾回收器和回收算法

GC垃圾收集算法

堆空间

分代:

年轻代:
    Eden区: 对象创建的区域: gc最频繁,99%的对象都是在这里创建和销毁的,经过一次youngGC,Eden区基本就空了
    Survival区:
        from: 经过一次youngGC,Eden和to区还存活的对象放入from区, from和to区角色互换
        to:  经过一次youngGC,仍然存活的对象和Eden区存活对象一起放入from区,并把存活足够久的对象[默认是15次youngGC]转入老年代
    
    三者占用内存比例:
    Eden:from:to=8:1:1

老年代:
    年老代里存放的都是存活时间较久的,较大的对象,因此年老代使用标记整理算法。当年老代容量满的时候,会触发一次Major GC(full GC),回收年老代和年轻代中不再被使用的对象资源。

永久代: jdk1.8叫元空间




GCRoot:
    1、虚拟机栈中引用的对象!(局部变量表引用的对象)
    2、类中静态属性引用的对象
    3、方法区中的常量
    4、本地方法栈中 Native 方法引用的对象!


垃圾收集器:

young:
    DefNew: serial
    ParNew: parNew
    PSYoungGen: parallelScavenge

old:     
    Tenured: serialOld
    ParOldGen: parallelOld
    cms: 已经弃用

young+old: 
    G1垃圾回收器:
        jdk9开始作为默认的垃圾收集器 
        特点: 
            1, 高吞吐量+低延迟
            2, 避免内存碎片
            3, 支持大堆,一个收集器解决堆内存的回收
            4, 可预测的停顿时间

ZGC: 新一代的GC,jdk14开始支持. 低延迟
原文地址:https://www.cnblogs.com/alenblue/p/12890331.html