JVM垃圾回收器

JVM有四种垃圾回收器:

(1)串行垃圾回收器:采用单线程进行垃圾回收,占用内存比较小,适合个人电脑使用。

serial垃圾回收器:用于新生代垃圾回收,采用标记复制算法。

serial Old垃圾回收器:用于老年代垃圾回收,采用标记整理算法。

缺点:垃圾回收时只有一个线程在工作,其它java应用的线程全部暂停(STW),等待垃圾回收的完成。

(2)并行垃圾回收器:采用多线程进行垃圾回收,所有java应用线程全部暂停(STW),等待垃圾回收的完成,JDK8默认采用。

Parallel New垃圾回收器:用于新生代垃圾回收,采用标记复制算法。

Parallel Old垃圾回收器:用于老年代垃圾回收,采用标记整理算法。

(3)并发(CMS)垃圾回收器:一款并发的、使用标记清除的垃圾回收器,主要针对与老年代。

优点:进行垃圾回收时,其它应用能够运行,不用暂停(STW)。

缺点:采用标记清除算法会产生大量的内存碎片。

回收过程有四步:

初始标记:主要是标记根对象(GC Roots)的下一级,这个阶段会暂停用户线程(STW),但是停顿时间比较短。

并发标记:这个阶段不会赞停用户线程(不会STW),耗时比较长,但是可以和用户线程并发执行。

重新标记:并发标记阶段不会暂停用户线程,所以会造成引用关系不一致,所以需要重新标记,重新标记会暂停用户线程(STW)。

并发清除:清除阶段是清理删除掉标记阶段判断的已经死亡的对象,由于不需要移动存活对象,所以这个阶段也是可以与用户线程同时并发进行的。

(4)G1垃圾回收器:应用于新生代和老年代,采用标记复制和标记整理算法,响应时间和吞吐量兼顾。JDK9默认采用。

回收过程有四步:

初始标记:主要是标记根对象(GC Roots)的下一级,这个阶段会暂停用户线程(STW),但是停顿时间比较短,因为这个阶段是借用新生代垃圾回收同步完成的。

并发标记:这个阶段不会赞停用户线程(不会STW),耗时比较长,但是可以和用户线程并发执行。

重新标记:并发标记阶段不会暂停用户线程,所以会造成引用关系不一致,所以需要重新标记,重新标记会暂停用户线程(STW)。

清理阶段:需要移动存活对象,所以要暂停用户线程(STW),由多个线程共同完成清理工作。

posted @   程序员_YHB  阅读(118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示