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),由多个线程共同完成清理工作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)