欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > JVM之垃圾回收器概述的详细解析

JVM之垃圾回收器概述的详细解析

2025/2/8 13:17:35 来源:https://blog.csdn.net/qq_69748833/article/details/144895481  浏览:    关键词:JVM之垃圾回收器概述的详细解析

垃圾回收器

概述

垃圾收集器分类:

  • 按线程数分(垃圾回收线程数),可以分为串行垃圾回收器和并行垃圾回收器

    • 除了 CMS 和 G1 之外,其它垃圾收集器都是以串行的方式执行

  • 按照工作模式分,可以分为并发式垃圾回收器和独占式垃圾回收器

    • 并发式垃圾回收器与应用程序线程交替工作,以尽可能减少应用程序的停顿时间

    • 独占式垃圾回收器(Stop the world)一旦运行,就停止应用程序中的所有用户线程,直到垃圾回收过程完全结束

  • 按碎片处理方式分,可分为压缩式垃圾回收器和非压缩式垃圾回收器

    • 压缩式垃圾回收器在回收完成后进行压缩整理,消除回收后的碎片,再分配对象空间使用指针碰撞

    • 非压缩式的垃圾回收器不进行这步操作,再分配对象空间使用空闲列表

  • 按工作的内存区间分,又可分为年轻代垃圾回收器和老年代垃圾回收器

GC 性能指标:

  • 吞吐量:程序的运行时间占总运行时间的比例(总运行时间 = 程序的运行时间 + 内存回收的时间)

  • 垃圾收集开销:吞吐量的补数,垃圾收集所用时间与总运行时间的比例

  • 暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间

  • 收集频率:相对于应用程序的执行,收集操作发生的频率

  • 内存占用:Java 堆区所占的内存大小

  • 快速:一个对象从诞生到被回收所经历的时间

垃圾收集器的组合关系

新生代收集器:Serial、ParNew、Parallel Scavenge

老年代收集器:Serial old、Parallel old、CMS

整堆收集器:G1

  • 红色虚线在 JDK9 移除、绿色虚线在 JDK14 弃用该组合、青色虚线在 JDK14 删除 CMS 垃圾回收器

查看默认的垃圾收回收器:

  • -XX:+PrintcommandLineFlags:查看命令行相关参数(包含使用的垃圾收集器)

  • 使用命令行指令:jinfo -flag 相关垃圾回收器参数 进程 ID

Serial(串行)

Serial:串行垃圾收集器,作用于新生代,是指使用单线程进行垃圾回收,采用复制算法,新生代基本都是复制算法

STW(Stop-The-World):垃圾回收时,只有一个线程在工作,并且 Java 应用中的所有线程都要暂停,等待垃圾回收的完成

Serial old(串行):执行老年代垃圾回收的串行收集器,内存回收算法使用的是标记-整理算法,同样也采用了串行回收和 STW 机制

  • Serial old 是 Client 模式下默认的老年代的垃圾回收器

  • Serial old 在 Server 模式下主要有两个用途:

    • 在 JDK 1.5 以及之前版本(Parallel Old 诞生以前)中与 Parallel Scavenge 收集器搭配使用

    • 作为老年代 CMS 收集器的后备垃圾回收方案,在并发收集发生 Concurrent Mode Failure 时使用

开启参数:-XX:+UseSerialGC 等价于新生代用 Serial GC 且老年代用 Serial old GC

优点:简单而高效(与其他收集器的单线程比),对于限定单个 CPU 的环境来说,Serial 收集器由于没有线程交互的开销,可以获得最高的单线程收集效率

缺点:对于交互性较强的应用而言,这种垃圾收集器是不能够接受的,比如 JavaWeb 应用


版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com