美文网首页Java 核心技术
JVM垃圾回收器的概要介绍

JVM垃圾回收器的概要介绍

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2020-12-14 07:22 被阅读0次

    垃圾回收器的发展历史

    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收集器 并发收集器 标记整理算法/复制算法 老年代/新生代 响应速度优先 适合于大型服务器端

    垃圾回收器的组合方式

    如何查看当前垃圾回收器

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


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

    jinfo -flag +HeapDumpAfterFullGC pid


    +号表示设置当前参数为true,-号为false。*
    静态设置请参考垃圾回收器-串行并行垃圾回收器-CMS垃圾回收器-G1

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

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

    相关文章

      网友评论

        本文标题:JVM垃圾回收器的概要介绍

        本文链接:https://www.haomeiwen.com/subject/cutkgktx.html