垃圾收集算法,垃圾收集器parNew&CMS与底层三色标记法

垃圾收集算法

  1. 分代收集理论 针对新生代和老年代中存活对象数量不同,新生代中朝生夕死采用复制算法,老年代存活对象较多,采用标记清除和标记整理算法
  2. 复制算法 将内存分类大小相等的两块,每次只使用其中一块,当一块内存使用完时,将存活的对象复制到另一块,清理掉这一块
  3. 标记清除算法存活的对象进行标记,没有存活的对象进行清理,缺点:效率问题以及碎片化
  4. 标记整理算法 将存活的对象进行标记,向一端移动,统一回收另一端内存

垃圾收集器

在这里插入图片描述
收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现

并没有一种垃圾收集器能解决所有问题,只能根据项目实际需要,选择适合的垃圾收集器。

1. Serial收集器 (-XX:+UseSerialGC -XX:+UseSerialOldGC)

串行收集器,单线程,会STW。新生代采用复制算法,老年代采用标记整理算法
特点:简单而高效(与其他单线程收集器相比)
Serial Old收集器是Serial收集器的老年代版本

2. Parallel Scavenge收集器(-XX:+ParallelGC -XX:+UseParallelOldGC)

并行收集器,其实就是Serial收集器的多线程版本,Parallel Scavenge 关注点是吞吐量,CMS等垃圾收集器的关注点更多的是用户的体验,卡顿的时间。
新生代采用复制算法,老年代采用标记整理算法

3. ParNew收集器(-XX:+UseParNewGC)

ParNew收集器与Parallel 收集器类似,主要区别在于ParNew 可与CMS收集器配合使用

新生代采用复制算法,老年代采用标记整理算法

4. CMS收集器(-XX:+UseConcMarkSweepGC(old))

CMS收集器是一种以获取最短回收卡顿时间为目标的收集器,它非常符合在用户体验的应用上使用,它是HotSpot虚拟机第一款真正意义上的并发收集器,它第一次实现了让垃圾收集器和用户线程(基本上)同时工作。 采用标记清除算法实现

分为4个步骤: 初始标记
并发标记
重新标记
并发重置
优点:并发收集,低卡顿
缺点:对cpu资源敏感 无法处理浮动垃圾
底层采用标记清除算法,碎片化,当然可以通过参数配置,进行整理
在这里插入图片描述
在这里插入图片描述

垃圾收集器底层算法实现

  三色标记              黑色     灰色     白色

5. G1 收集器

G1收集器取代了并行收集器(年轻代+老年代组合),不再区分是哪个分代,而是哪块内存中存放的垃圾数量最多,回收收益最大,这就是G1收集器的Mixed GC模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值