JVM垃圾回收算法

垃圾回收机制
引用计数法 (循环引用会导致垃圾回收不到)
可达性分析法(Root Searching 根可达算法)
线程栈变量、静态变量、常量池、JNI指针 都是root 对象
在这里插入图片描述

垃圾回收算法

  1. 标记、清除(mark-sweep):
    优点:存活效率比较高的时候,效率高
    缺点:两遍扫描,效率低;容易产生碎片

  2. 复制(copying)
    优点:适用于存活对象找少,只扫描一次,效率提高,没有碎片
    缺点:空间浪费,移动复制对象,需要整理对象引用

  3. 标记、压缩(mark-compact)
    优点:空间连续,无碎片
    缺点:扫描两次,移动碎片,效率偏低

JMM
新生代:老年代 = 1:2
新生代 = Eden (8)+ s0(1)+s1(1)

垃圾回收机器
1.Serial :STW(stop the world) ,单线程回收.
Serial : 针对年轻代(copy 回收算法)
Serial Old : 针对老年代(标记清除、标记压缩)
2. Parallel Scavenge : STW ,多线程回收
Parallel S: 针对年轻代(copy)
Parallel Old: 针对老年代 (标记清除、标记压缩)
3.CMS: 开始并行回收垃圾,适用老年代
Par New (新生代) + CMS 一起使用
过程:
(1)初始化标记 : 使用STW,找到GC Root
(2)并行标记
(3)重新标记 : 使用STW,然后重新标记
(4)标记清除
优点: 并行回收
缺点:使用标记、清除算法,会导致碎片化(浮动垃圾),太多碎片化后,又才有Serial Old清除,FGC时间长
三色标记算法
黑色:自己标记完,属性也标记完
灰色:自己标记完,属性未标记完
白色:未标记

在这里插入图片描述在这里插入图片描述
三色标记的缺点: 并发标记时,白色对象被错误回收

CMS算法 采用三色标记 + Incremental update(白色被黑色引用,就把黑色标记为灰色)

4. Par New: STW,多线程,但是可以和CMS一起使用

5. G1: 物理上不分新生代和老年代,只是在逻辑上采用新生代和老年代
G1算法: 三色标记+ SATB(snapshot at beginging)

6.ZGC :
算法: coloredPointer + 写屏障

7.Shenandoah
算法: coloredPointer + 读屏障
8.Eplison

参考资料:https://www.cnblogs.com/super-jing/p/10795099.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值