一 垃圾回收器总结
截止 JDK1.8,一共有 7 款不同的垃圾收集器。每一款的垃圾收集器都有不同的特点,在具体使用的时候,需要根据具体的情况选用不同的垃圾收集器。
二 GC 发展阶段
Serial => Parallel(并行) => CMS(并发) => G1 => ZGC
三 垃圾回收器组合
不同厂商、不同版本的虚拟机实现差距比较大。
HotSpot 虚拟机在 JDK7/8 后所有收集器及组合如下图。(更新到 JDK14)
四 怎么选择垃圾回收器
Java 垃圾收集器的配置对于 JVM 优化来说是一个很重要的选择,选择合适的垃圾收集器可以让 JVM 的性能有一个很大的提升。怎么选择垃圾收集器?
-
优先调整堆的大小让 JVM 自适应完成。
-
如果内存小于 100M,使用串行收集器。
-
如果是单核、单机程序,并且没有停顿时间的要求,串行收集器。
-
如果是多 CPU、需要高吞吐量、允许停顿时间超过1秒,选择并行或者 JVM 自己选择。
-
如果是多 CPU、追求低停顿时间,需快速响应(比如延迟不能超过1秒,如互联网应用),使用并发收集器。
-
官方推荐 G1,性能高。现在互联网的项目,基本都是使用 G1。
最后需要明确一个观点。
-
没有最好的收集器,更没有万能的收集器。
-
调优永远是针对特定场景、特定需求,不存在一劳永逸的收集器。
五 面试
对于垃圾收集,面试官可以循序渐进从理论、实践各种角度深入,也未必是要求面试者什么都懂。但如果你懂得原理,一定会成为面试中的加分项。
这里较通用、基础性的部分如下:
垃圾收集的算法有哪些?如何判断一个对象是否可以回收?
垃圾收集器工作的基本流程。
另外,大家需要多关注垃圾回收器各种常用的参数。