JVM垃圾回收器

垃圾回收器

Serial回收器

单线程执行垃圾收集,收集过程中会有较长的STW(Stop The World),在GC(minor gc和full gc)时工作线程不能工作。虽然STW较长,但简单、直接。新生代采用复制算法,老年代采用标记整理算法。

Serial垃圾回收器

Parallel收集器

相比于Serial收集器,提升在于使用多线程来回收垃圾,会充分利用CPU,但是仍然有STW,这是jdk8默认使用的新生代和老年代的垃圾收集器。

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

Parallel垃圾回收器

ParNew收集器

工作原理和Parallel收集器一样,都是使用多线程进行GC,但是区别在于ParNew收集器可以和CMS收集器配合工作。主流的方案:ParNew收集器负责收集新生代,CMS负责收集老年代。

parallel垃圾回收器

CMS收集器

目标:尽量减少STW时间,提高用户体验。做到用户进程和垃圾回收进程几乎并发执行。

  • 初始化标记:暂停所有的其他线程(STW),CMS线程标记gc roots能直接引用的对象。
  • 并发标记:用户线程和CMS线程并发执行,CMS线程从初始化标记的引用对象,遍历整个对象图,将所有能链接到gc roots的对象打上标记,因为此过程是和用户线程并发执行的,因此存在一些新创建的对象没有打上标记。
  • 重新标记:为了给并发标记过程中新创建未打上标记的对象打上标记,会暂停用户线程,并且多线程的执行CMS线程,用到三色标记算法做重新标记(时间远比并发标记短)。
  • 并发清理:开启用户线程,同时gc线程对老年代中的未标记对象进行清理,这个阶段新创建的对象被标记为黑色,对黑色对象不进行处理。
  • 并发重置:重置本次GC过程中的标记。

在这里插入图片描述
注:图中应为CMS线程,因个人失误错写成CMC线程。

三色标记算法

在并发标记阶段,对象的状态可能发生改变,GC在进行可达性分析算法分析对象时,用三色来标识对象的状态

  • 黑色:这个对象及其所有引用都被GC Roots遍历,黑的的对象不会被回收。
  • 灰色:这个对象其部分的引用没有被GC Roots遍历,在重新标记阶段,会重新遍历灰色对象。
  • 白色:这个对象没有被GC Roots遍历过(是垃圾),在重新标记时,如果对象是白色,那么将会被回收。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值