3、垃圾回收 (发生在堆和方法区中)
3.1、典型垃圾回收器
CMS
简介 以获取最短回收停顿时间为目标的收集器,它是一种并发收集器,采用的是 Mark-Sweep 算法。
场景 如果你的应用需要更快的响应,不希望有长时间的停顿,同时你的 CPU 资源也比较丰富,就适合适用 CMS 收集器。
垃圾回收步骤:
- 初始标记 (Stop the World 事件 CPU 停顿, 很短) 初始标记仅标记一下 GC Roots
能直接关联到的对象,速度很快; - 并发标记 (收集垃圾跟用户线程一起执行) 并发标记过程就是进行 GC Roots 查找的过程;
- 重新标记 (Stop the World 事件 CPU 停顿,比初始标记稍微长,远比并发标记短)
修正由于并发标记时应用运行产生变化的标记。 - 并发清理,标记清除算法;
缺点:
并发标记时和应用程序同时进行,占用一部分线程,所以吞吐量有所下降。
并发清除时和应用程序同时进行,这段时间产生的垃圾就要等下一次 GC 再清除。
采用的标记清除算法,产生内存碎片,如果要新建大对象,会提前触发 Full GC 。
G1
简介 是一款面向服务端应用的收集器,它能充分利用多 CPU、多核环境。因此它是一款并行与并发收集器,并且它能建立可预测的停顿时间模型,即可以设置 STW 的时间。
垃圾回收步