JVM垃圾回收器的发展历程及使用场景汇总

上一篇 << 下一篇 >>>JVM串行并行垃圾回收器的关注点


垃圾回收器的发展历史

1999年:随JDK1.3.1一起来的串行方式Serial GC(第一款GC),ParNew GC是SerialGC的多线程版本。
2002年:2月26日,Parallel GC和Concurrent Mark Sweep GC(即CMS)跟随JDK1.4.2一起发布。Parallel GC在JDK6之后成为Hotspot默认GC。
2012年:在JDK1.7u4中,G1可用。
2017年:JDK9中G1成为默认垃圾回收器,以替代CMS.
2018年:3月,JDK10中G1的并行完整垃圾回收,实现并行性能改善最坏情况的延迟。
9月,JDK11发布,引入Epsilon GC,又称为“No-Op无操作”回收器,同时引入ZGC:可伸缩的低延迟回收器(Experimental)
2019年:3月,JDK12发布。增加G1,自动返回未使用堆内存给操作系统;同时,引入Shenandoah GC:地停顿时间的GC(Experimental)
9月,JDK13发布。增强ZGC,自动返回未使用堆内存给操作系统。
2020年:3月,JDK14发布。删除CMS,扩展ZGC,在mac和windows的应用。

频繁推出垃圾回收器的原因?

主要解决STW问题。

怎样避免垃圾收集器频繁回收?

可以内存调优:
a、堆内存空间设置比例较大
b、堆内存初始化与最大值一定保持一致
c、生成环境中不要去调用System.gc()

垃圾回收器何时触发收集垃圾?

当新生代或老年代内存满的时候。

垃圾回收器的7种类型

串行GC:采用单线程回收垃圾,用户线程处于等待状态,适合于堆内存空间比较小和个人小项目
并行GC:多条垃圾收集线程并行工作,但用户线程仍然处于等待状态。
并发GC:用户线程和垃圾收集线程同时执行,他们运行于不同的CPU上。(不一定是并行,可能是交替执行)

回收器 类型 算法 作用位置 特点 使用场景
SerialGC 串行收集器 复制算法 新生代 响应速度快 适合单核的客户端应用程序下
SerialGCOld 串行收集器 标记整理算法 老年代 响应速度快 适合单核的客户端应用程序下
ParNew 并行收集器 复制算法 新生代 响应速度快 适合多核的cpu情况下,默认与cms配合使用
Parallel 并行收集器 复制算法 新生代 吞吐量优先 适合于后端多核cpu情况下 堆内存不是很大
Parallel old 并行收集器 标记整理算法 老年代 老年代吞吐量优先 适合于后端多核cpu情况下 堆内存不是很大
CMS 收集器并发收集器 标记清除 老年代 响应速度快 适合于企业级B/S项目
G1收集器 并发收集器 标记整理算法/复制算法 老年代/新生代 响应速度优先 适合于大型服务器端

垃圾回收器的组合方式

JVM垃圾回收器的发展历程及使用场景汇总_第1张图片

如何查看当前垃圾回收器

a、-XX:+PrintCommandLineFlags 参数可查看默认设置收集器类型
命令:java -XX:+PrintCommandLineFlags -version
b、JConsole工具


JVM垃圾回收器的发展历程及使用场景汇总_第2张图片

如何动态设置当前垃圾回收器

jinfo -flag +HeapDumpAfterFullGC pid


+号表示设置当前参数为true,-号为false。*
静态设置请参考JVM串行并行垃圾回收器的关注点、一张图看懂CMS垃圾回收器的底层原理
、G1能作为JDK9默认垃圾回收器的优势分析

垃圾回收器和垃圾回收算法区别

垃圾收集器:串行、并行收集、CMS、G1、Java11的ZGC收集器,能够降低对我们用户线程暂停的时间或者用户线程和GC线程同时运行。
垃圾收集算法:回收算法:标记清除、标记整理、标记复制、分代算法。


相关文章链接:
<< << << << <<<自定义SPI和热部署技术破坏类加载器的双亲委派模式
<< << << << <<<服务器CPU飙升为100%问题排查及如何避免
<< << << << << << <<<一张图看懂CMS垃圾回收器的底层原理
<< << << << << <<

你可能感兴趣的:(JVM垃圾回收器的发展历程及使用场景汇总)