概述
垃圾收集器分类:
- 按线程数分(垃圾回收线程数),可以分为串行垃圾回收器和并行垃圾回收器
- 除了 CMS 和 G1 之外,其它垃圾收集器都是以串行的方式执行
- 按照工作模式分,可以分为并发式垃圾回收器和独占式垃圾回收器
- 并发式垃圾回收器与应用程序线程交替工作,以尽可能减少应用程序的停顿时间
- 独占式垃圾回收器(Stop the world)一旦运行,就停止应用程序中的所有用户线程,直到垃圾回收过程完全结束
- 按碎片处理方式分,可分为压缩式垃圾回收器和非压缩式垃圾回收器
- 压缩式垃圾回收器在回收完成后进行压缩整理,消除回收后的碎片,再分配对象空间使用指针碰撞
- 非压缩式的垃圾回收器不进行这步操作,再分配对象空间使用空闲列表
- 按工作的内存区间分,又可分为年轻代垃圾回收器和老年代垃圾回收器
GC 性能指标:
- 吞吐量:程序的运行时间占总运行时间的比例(总运行时间 = 程序的运行时间 + 内存回收的时间)
- 垃圾收集开销:吞吐量的补数,垃圾收集所用时间与总运行时间的比例
- 暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间
- 收集频率:相对于应用程序的执行,收集操作发生的频率
- 内存占用:Java 堆区所占的内存大小
- 快速:一个对象从诞生到被回收所经历的时间
新生代收集器:Serial、ParNew、Parallel Scavenge
老年代收集器:Serial old、Parallel old、CMS
整堆收集器:G1
查看默认的垃圾收回收器:
-XX:+PrintcommandLineFlags
:查看命令行相关参数(包含使用的垃圾收集器)- 使用命令行指令:jinfo -flag 相关垃圾回收器参数 进程 ID