视频课程
小黑屋思过中,禁止观看!
评论并刷新后可见

您需要在视频最下面评论并刷新后,方可查看完整视频

视频课程
立即观看
付费视频

您支付费用,方可查看完整视频

¥{{user.role.value}}
课程视频
开始学习
会员专享

视频合集

最全JVM垃圾收集器详解

  • 课程笔记
  • 问答交流

上一节课我讲到了最全JVM垃圾回收算法,分别谈到了新生代和老年代的具体实现算法实现。
算法实现掌握了,那针对于新生代与老年代的具体实现又是怎样的呢?
这就不得不谈到今天的重点:JVM垃圾收集器,也就是JVM垃圾回收算法的具体实现。

为了助大家掌握好JVM垃圾收集器,这节课我会重点讲解以下6点:

1.JVM垃圾收集器

2.JVM收集器类别

3.Serial 串行收集器

4.Parallel并行收集器

5.CMS G1并发收集器

6.ZGC并发收集器

7.JVM垃圾收集器必考点总结

JVM垃圾收集器整体

最全JVM垃圾收集器详解-mikechen

新生代垃圾收集器

最全JVM垃圾收集器详解-mikechen

  • Serial
  • ParNew
  • Parallel Scavenge

老年代收集器

最全JVM垃圾收集器详解-mikechen

  • Serial Old
  • Parallel Old
  • CMS

JVM垃圾收集器类别

评论交流
  1. 李鸿翼

    1.JVM 常用垃圾收集器有哪些?

    年轻代: Serial串行收集 ParNew 并行收集 Parallel Scavenge并行收集
    老年代: Serial old串行 CMS并发收集器 Parallel Old收集
    g1 收集器

    2.分别谈谈各自收集器的特点?

    Serial :新生代,单线程收集, 复制算法
    Serial old : 老年代, 单线程收集,标记-整理

    ParNew :新生代,多线程收集,复制算法
    CMS并发收集器 :老年代,可用和用户线程并行收集,标记-清除

    Parallel Scavenge :新生代,多线程,追求吞吐量

    Parallel Old : 老年代 ,多线程,标记-整理

    g1: 新生代和老年代都能用,把整个内存划分为多个大小相等的独立区域(region),适用于大内存

    3.最后重点谈谈CMS和G1收集器的工作机制?以及优缺点与应用场景?

    cms:
    执行一次垃圾回收分为4个阶段:
    (1)初始标记, stw, 标记所有GC roots 直接引用的对象, 速度很快
    (2)并发标记 对老年代所有对象进行gc roots追踪,最耗时
    (3)重新标记 stw, 对第二阶段中被系统程序运行变动过的少数对象进行标记,速度很快
    (4)并发清理 清理之前标记的垃圾对象,最耗时

    其中初始标记和重新标记,耗时很短,虽然会导致stw,但影响不大
    并发标记和并发清理,耗时最长,但是可以和系统的工程线程并发运行,对系统影响不大

    CMS ,并发标记和并发清理阶段,会比较消耗CPU资源,并发并发清理阶段会产生“浮动垃圾”,该算法是标记-清除算法,所有会导致内存碎片。

    g1:

    (1)初始标记 ,stw, 标记GC ROOTS 直接能引用的对象,速度快
    (2)并发标记, 追踪所有存活对象,程序可以运行,耗时
    (3)最终标记,stw
    (4)混合回收,从新生代、老年代、大对象挑选一些region,保证用指定的时间,回收尽可能多的垃圾

    基于复制算法,不会产生内存碎片,可预期的停顿,适合大堆、高并发场景

    • mikechen

      非常完整 ✗咧嘴笑✗ ✗拳头✗

      这里我统一补充几个细节点:

      1.很多时候其实是想往CMS引导问,比如你上面提到的浮动垃圾,大量的空间碎片(这个是很好的加分项),如果谈到了肯定还会继续问到:Full GC的问题。

      2.对于Full GC Minor MajorGC这几个点一定要弄透,比如从Minor到FullGC的全流程以及细节部分(什么时候回收,什么时候到老年代),如果出现了FullGC如何来调优等。

      如果把上面两点在课后再补充吃透,基本关于JVM垃圾算法与收集器应该就没有问题了,加油 ✗肌肉✗

  2. 路正银

    1.JVM 常用垃圾收集器有哪些?
    Serial串行垃圾收集器、Serial Old、ParNew并行收集器、Parallel Scavenge并行收集器、Parallel Old、CMS并发收集器、G1收集器

    2.分别谈谈各自收集器的特点?
    Serial串行垃圾收集器 单线程收集器 用户线程STW
    ParNew并行收集器 Serial多线程版本
    Parallel Scavenge并行收集器 追求高吞吐量
    CMS并发收集器 第一款并发处理器 标记-清除算法 会产生空间碎片
    G1收集器 替换CMS 新生+老年代 复制+标记-整理

    3.最后重点谈谈CMS和G1收集器的工作机制?以及优缺点与应用场景?
    CMS收集器,一种以获取最短回收停顿时间为目标的收集器。基于“标记-清除”算法实现的,整个过程分为4个步骤:
    (1)初始标记(2)并发标记(3)重新标记(4)并发清除,整个过程中耗时最长的并发标记和并发清除过程中,收集器线程都可以与用户线程一起工作,所以总体上来说,CMS收集器的内存回收过程是与用户线程一起并发执行的。
    CMS的三个缺点:(1)CMS收集器对CPU资源非常敏感(2)CMS收集器无法处理浮动垃圾(3)基于“标记-清除”,收集结束时会有大量的空间碎片产生。
    G1收集器,运行步骤:(1)初始标记(2)并发标记(3)最终标记(4)筛选回收
    特点:并行与并发、分代收集、空间整合(基于“标记-整理”)、可预测的停顿
    G1收集器将整个java堆划分为多个大小相等的独立区域(Region),跟踪各个Region里面垃圾堆积的价值大小(回收所获得空间大小以及回收所需的时间经验值),在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region

    • mikechen

      非常完整 ✗咧嘴笑✗ ✗拳头✗

      这里我统一补充几个细节点:

      1.很多时候其实是想往CMS引导问,比如你上面提到的浮动垃圾,大量的空间碎片(这个是很好的加分项),如果谈到了肯定还会继续问到:Full GC的问题。

      2.对于Full GC Minor MajorGC这几个点一定要弄透,比如从Minor到FullGC的全流程以及细节部分(什么时候回收,什么时候到老年代),如果出现了FullGC如何来调优等。

      如果把上面两点在课后再补充吃透,基本关于JVM垃圾算法与收集器应该就没有问题了,加油 ✗肌肉✗