1. 评估GC的性能指标
吞吐量: 运行用户代码时间占总运行时间的比例
暂停时间: GC时,程序的工作线程被暂停的时间
内存占用: Java堆区所占内存的大小
2. 垃圾回收器关系概述
垃圾收集器与垃圾分代之间的关系
垃圾收集器之间的组合关系
jdk8-9取消红色线条,jdk14取消绿色线条。
3. 七款经典的垃圾回收器
Serial回收器:串行回收
Serial收集器采用复制算法、串行回收,STW机制。
Serial Old收集器采用串行回收和STW机制,使用标记-压缩算法。是在Client模式下默认的老年代垃圾回收器。在Server模式下,与新生代的Parallel Scavenge配合使用,并作为老年代CMS收集器的后备方案。
优点: 简单高效
一般在Java web应用程序中不会采用串行垃圾收集器。
ParNew回收器:并行回收
Parallel回收器:吞吐量优先
CMS回收器:低延迟
是一款并发收集器,可以让垃圾收集线程和用户线程同时工作,尽可能减少垃圾收集和用户线程的停顿时间。使用标记-清除算法,也会STW。
初始标记: 所有线程由于STW出现停顿,主要任务是标记GC Roots能直接关联到的对象(一层)。完成之后结束STW。
并发标记: 从直接关联对象开始遍历整个对象图,不需STW,垃圾收集线程与用户线程并发运行。
重新标记: 修正并发标记期间因用户线程继续运行而导致标记变动的那部分标记。STW。
并发清除: 清理标记阶段已经死亡的对象,释放内存空间。垃圾收集线程与用户线程并发运行。无STW。
上面6种垃圾回收器如何选择?
G1回收器:区域化分代式,垃圾优先
是jdk9及之后的默认垃圾收集器。
特点
并行与并发兼具:
并行:回收期间有多个GC线程同时工作,此时用户线程STW。
并发:可以与用户线程交替执行。
分代收集: 仍然区分年轻代和老年代,但不要求连续。同时兼顾年轻代与老年代。
其中H为大对象,超过1.5个region大小时放到H区。
空间整合: 内存回收以region为单位,region之间是复制算法,整体来看为标记-压缩,两种方法都可以避免内存碎片。
4.七种经典垃圾回收器总结