Java和C++最大的区别就是,C++自己管理内存,Java有自动的垃圾回收功能,提供了各种各样的垃圾回收器。
垃圾回收器分类
- 对于年轻代和老年代,所用的垃圾回收器不同。如上图中Serial GC、ParNew GC、 Parallel GC是针对于年轻代的垃圾回收器。
- 而Serial Old GC、CMS、 Parallel Old GC是针对于老年代的垃圾回收器。
- G1垃圾回收器采用了新的内存划分方式,所以既用于年轻代又用于老年代。
Serial GC
串行垃圾回收器,采用复制算法,STW的方式执行内存回收。
对应老年代的Serial Old GC 采用标记-整理算法。
特点:
ParNew GC
并行垃圾回收器,相当于Serial GC的多线程版本。使用复制算法,回收期间会造成STW。
特点:
- 主要用于Server模式下新生代的默认垃圾收集器。
- 使用-XX:+UseParNewGC手动指定虚拟机年轻代使用ParNew收集器。
Parallel GC
并行垃圾回收器,吞吐量优先。新生代Parallel采用复制算法,老年代Parallel Old采用标记压缩算法。回收时同样会STW。
是JDK1.8默认的垃圾回收器。
特点:
- 吞吐量优先,目标是控制吞吐量,使用自适应的调节策略。
- 适合于后台运算,不需要太多交互任务的情景。
- 通过-XX;+UseAdaptiveSizePolicy参数设置自适应调节策略。