GC分类:
按线程数分类:串行回收器和并行回收器
串行回收器:是指在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时用户线程被暂停,直至垃圾回收工作结束。串行回收默认被应用在Client模式下的JVM中
并行回收器:并行回收器可以运用多个CPU同时执行垃圾回收,因此提升了应用的吞吐量。并行回收默认被应用在Server模式下的JVM中
按照碎片处理方式分类:压缩式回收器和非压缩式回收器
按工作内存区间分类:年轻代垃圾回收器和年老代垃圾回收器
注:目前所有的垃圾回收器都使用了“stop-the-world”机制
性能指标:
吞吐量:运行用户代码的时间占总运行时间的比例;总运行时间=用户代码运行时间+垃圾回收时间;比如虚拟机总共运行了100分钟,其中垃圾回收用了1分钟,那么吞吐量=99%;高吞吐量的应用程序有更长的时间基准,能容忍较高的暂停时间,快速响应是不必考虑的;吞吐量优先,意味着在单位时间内STW的时间最短:0.2+0.2=0.4;大白话:单次GC时间可以长,但是总GC时间要短;吞吐量越高程序运行越快
暂停时间:一段时间内用户线程暂停,GC线程执行;暂停时间优先,意味着尽可能让单次STW的时间最短:0.1+0.1+0.1+0.1+0.1=0.5;低延迟对交互式应用程序非常重要
垃圾回收开销:
回收频率:
内存占用:
发展史:
1999年JDK1.3.1,Serial GC,第一款GC,ParNew GC是Serial GC的多线程版本
2002年JDK1.4.2,Parallel GC和Concurrent Mark Sweep GC
JDK6之后Parallel GC成为HotSpot默认GC
2012年JDK1.7,G1
2017年JDK9,G1成为HotSpot默认GC,以代替CMS
......
Serial回收器:串行回收
串行回收,适用于单核CPU
Serial