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开始支持. 低延迟