垃圾回收器的分类
- 按线程划分:分为串行垃圾回收器与并行垃圾回收器
- 按工作模式划分:分为并发式垃圾回收器(没有STW)和独占式垃圾回收器
- 按碎片整理方式划分:分为压缩式垃圾回收器与非压缩式垃圾回收器,压缩式垃圾回收器在回收时会对存活对象进行压缩整理,处理内存碎片,GC后空闲内存成块,再分配对象时使用指针碰撞方法分配内存。非压缩式GC后内存分散,再分配对象时使用空闲列表分配内存。
- 按工作的内存区间划分:分为年轻代垃圾回收器和老年代垃圾回收器。
GC的性能指标概述
- 吞吐量:运行用户代码的时间占总运行时间的比例(总运行时间:程序的运行时间十内存回收的时间)
- 垃圾收集开销:吞吐量的补数,垃圾收集所用时间与总运行时间的比例。
- 暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间。
- 收集频率:相对于应用程序的执行,收集操作发生的频率。
- 内存占用:java堆区所占的内存大小。
- 快速:一个对象从诞生到被回收所经历的时间。
在最大吞吐量优先的情况下,降低停顿时间
七款经典的垃圾回收器
- 串行回收器:Serial、Serial Old
- 并行回收器:ParNew、Parallel Scavenge、Parallel Old
- 并发回收器:CMS、G1