垃圾检测和收集算法只是内存回收的方法论,而垃圾收集器才是内存回收的具体实现(可理解为“接口”与“实现类”的关系)。
ps:GC垃圾回收(垃圾检测-回收算法):https://editor.csdn.net/md/?articleId=103819619
垃圾收集器分类:
新生代的收集器包括
- Serial
- PraNew
- Parallel Scavenge
老年代的收集器包括
- Serial Old
- Parallel Old
- CMS
回收整个Java堆(新生代和老年代)
- G1收集器
新生代垃圾收集器解析
Serial 收集器
Serial 收集器是最基础、历史最悠久的收集器。特点:
- 单线程收集,且垃圾收集时,必须暂停其他所有的工作线程(Stop The World, STW),直到它收集结束。
- HotSpot 虚拟机运行在 Client 模式下默认新生代收集器。
- 优于其他收集器的地方:简单而高效(与其他收集器的单线程比)。对于限定单个 CPU 的环境来说,Serial
收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集效率。
运行示意图如下:
ParNew 收集器
ParNew 收集器实质上是 Serial 收集器的多线程并行版本。
除了同时使用多条线程进行垃圾收集之外,其余的行为包括 Serial 收集器可用的所有控制参数(-XX:SurvivorRatio, -XX:PretenureSizeThreshold、-XX:HandlePromotionFailure 等)、收集算法、Stop The World、对象分配原则、回收策略等都与 Serial 收集器完全一致。
运行示意图:
使用/禁用该收集器的 VM 参数
注:JDK 9 取消了 -XX:+UseParNewGC 参数
-XX:+/-UseParNewGC
Parallel Scave