GC垃圾回收器和回收算法
2021-01-22 06:15
标签:区域 常量 对象 吞吐量 nbsp 垃圾 you 局部变量 serial GC垃圾回收器和回收算法 标签:区域 常量 对象 吞吐量 nbsp 垃圾 you 局部变量 serial 原文地址:https://www.cnblogs.com/alenblue/p/12890331.htmlGC垃圾收集算法
堆空间
分代:
年轻代:
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开始支持. 低延迟