【JVM】JVM垃圾收集器

这篇具有很好参考价值的文章主要介绍了【JVM】JVM垃圾收集器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是JVM垃圾收集器

垃圾收集器是负责执行垃圾回收的组件,它们用于管理Java程序运行时的内存分配和释放。垃圾收集器的主要任务是自动回收不再使用的内存对象,并将内存空间重新回收以供程序继续使用。

四种垃圾收集器(按类型分)

1.串行垃圾收集器(效率低)

Serial和Serial Old串行垃圾收集器,是指使用单线程进行垃圾回收,堆内存较小,适合个人电脑

  • Serial 作用于新生代,采用复制算法
  • Serial Old 作用于老年代,采用标记-整理算法

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

【JVM】JVM垃圾收集器,JVM,面试题合集,jvm

2.并行垃圾收集器(JDK8默认使用此垃圾回收器)

Parallel New和Parallel Old是一个并行垃圾回收器,JDK8默认使用此垃圾回收器

  • Parallel New作用于新生代,采用复制算法
  • Parallel Old作用于老年代,采用标记-整理算法

垃圾回收时,多个线程在工作,并且java应用中的所有线程都要暂停(STW),等待垃圾回收的完成。(通过并行执行垃圾回收以提高性能)

相比较与串行垃圾收集器,并行垃圾收集器无非就是多开写线程来做垃圾回收,其实同样也要暂停所有正在执行的线程,只不过在多个线程并行回收效率比串行高

【JVM】JVM垃圾收集器,JVM,面试题合集,jvm

3.CMS(并发)垃圾收集器(只针对老年代垃圾回收的)

CMS全称 Concurrent Mark Sweep,是一款并发的、使用标记-清除算法的垃圾回收器,该回收器是针对老年代垃圾回收的,是一款以获取最短回收停顿时间为目标的收集器,停顿时间短用户体验就好

最大特点是在进行垃圾回收时,应用仍然能正常运行。
【JVM】JVM垃圾收集器,JVM,面试题合集,jvm

4.G1垃圾回收器(在JDK9之后默认使用G1)

G1垃圾收集器的设计目标是在可控的停顿时间实现高吞吐量的垃圾回收。

【JVM】JVM垃圾收集器,JVM,面试题合集,jvm
【JVM】JVM垃圾收集器,JVM,面试题合集,jvm

  • 应用于新生代老年代
  • 划分成多个区域每个区域都可以充当 eden,survivor,old, humongous,其中 humongous 专为大对象准备
  • 采用标记整理算法

因为基本上G1主要针对大型堆内存进行垃圾回收,而复制算法在大型堆内存上的应用存在一些挑战和限制。(必须考虑内存空间使用率)

  • 响应时间与吞吐量兼顾

  • 分成三个阶段:新生代回收、并发标记、混合收集(在不同的条件下被触发)
    【JVM】JVM垃圾收集器,JVM,面试题合集,jvm

  • 如果并发失败(即回收速度赶不上创建新对象速度),会触发 Full GC(尽量避免)

如果对象内存分配速度过快,mixed gc来不及回收,导致老年代被填满,就会触发一次full gc,G1的full gc算法就是单线程执行的serial old gc,会导致异常长时间的暂停时间,需要进行不断的调优,尽可能的避免full gc.

第一阶段----->Young Collection(年轻代垃圾回收)

  • 初始时,所有区域都处于空闲状态

【JVM】JVM垃圾收集器,JVM,面试题合集,jvm

  • 创建了一些对象,挑出一些空闲区域作为eden区存储这些对象
    【JVM】JVM垃圾收集器,JVM,面试题合集,jvm
  • 当伊甸园需要垃圾回收时,挑出一个空闲区域作为幸存区(s),用复制算法复制存活对象需要暂停用户线程
    【JVM】JVM垃圾收集器,JVM,面试题合集,jvm
  • 随着时间流逝,eden区的内存又有不足 将eden区以及之前幸存区中的存活对象,采用复制算法,复制到新的幸存区,其中较老对象晋升至老年代(o)

XX:MaxTenuringThreshold(默认15),计算出一个恰当的任期阈值,凡是超过任期阈值的对象都会被晋升到老年代。
或者幸存区里有大对象,也会直接晋升到老年代(毕竟大对象,复制来复制去影响整体效率)

【JVM】JVM垃圾收集器,JVM,面试题合集,jvm

Young Collection + Concurrent Mark (年轻代垃圾回收+并发标记)

老年代占用内存超过阈值(默认是45%)后,触发并发标记这时无需暂停用户线程
【JVM】JVM垃圾收集器,JVM,面试题合集,jvm
并发标记之后,会有重新标记阶段解决漏标问题此时需要暂停用户线程。
这些都完成后就知道了老年代有哪些存活对象,随后进入混合收集阶段。此时不会对所有老年代区域进行回收,而是根据停顿时间目标优先回收价值高(存活对象少)的区域(这也是 Gabage First 名称的由来)。

注意,这个阶段只是做标记,根据重新标记停顿时间来判断哪些老年代里面或的对象少,下一阶段优先对这些回收价值高的老年代来回收
【JVM】JVM垃圾收集器,JVM,面试题合集,jvm

第三阶段----->Mixed Collection (混合垃圾回收,新老都参与)

混合收集阶段中,参与复制的有 eden、survivor、old

【JVM】JVM垃圾收集器,JVM,面试题合集,jvm
复制完成,内存得到释放。进入下一轮的新生代回收、并发标记、混合收集

G1和CMS区别

【JVM】JVM垃圾收集器,JVM,面试题合集,jvm文章来源地址https://www.toymoban.com/news/detail-644080.html

到了这里,关于【JVM】JVM垃圾收集器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解JVM垃圾收集器

    相关系列 深入理解JVM垃圾收集算法-CSDN博客 目前市面常见的垃圾收集器有Serial、ParNew、Parallel、CMS、Serial Old、Parallel Old、G1、ZGC以及有二种不常见的Epsilon、Shenandoah的,从上图可以看到有连线的的垃圾收集器是可以组合使用,是年轻代+老年代。为什么会出现这么多的垃圾收集

    2024年04月09日
    浏览(37)
  • JVM的故事——垃圾收集器

    新生代收集器,最基础的收集器,单线程。进行垃圾收集时必须暂停其他所有工作线程,stop the world 新生代收集器,实质上是serial收集器的多线程版本。除了serial,只有它能和CMS收集器(老年代收集器)配合工作。随着处理器核心数越来越多,parnew比serial有着更好的性能。(但如

    2024年02月10日
    浏览(37)
  • JVM--- 垃圾收集器详细整理

    目录 一、垃圾收集需要考虑的三个事情: 二、垃圾回收针对的区域 三、如何判断对象已死         1.引用计数算法:         2.可达性分析算法 四、引用 五、生存还是死亡? 六、回收方法区 七、垃圾收集算法         1.分代收集理论 2.标记-清除算法         3.标记

    2024年02月19日
    浏览(54)
  • JVM:垃圾收集器(7种)

    如果两个收集器之间存在连线,就说明它们可以搭配使用。它们说在的区域则表示这个收集器属于新生代收集器还是老年代收集器。其中Serial(串行)、Parallel(并行)         Serial收集器是最基础、历史最悠久的收集器,是HotSpot虚拟机新生代收集器的唯一选择。这个收集器

    2024年01月20日
    浏览(35)
  • G1垃圾收集器-JVM(十三)

    上篇文章说了CMS垃圾收集器使用以及三色标记如何解决cms的一些问题。分别有初始标记,并发标记,重新标记,并发清理,并发重置。 CMS垃圾收集器三色标记-JVM(十二) G1收集器(Garbage-First) -XX:+UseG1GC 这是一款面向服务器的垃圾收集器,主要针对 设备多核cpu和大内存的机

    2024年02月16日
    浏览(53)
  • ZGC垃圾收集器-JVM(十五)

    上篇文章说了G1的特性,无分代,复制算法,大内存就可以用G1,可预测stw时间等特性。 G1垃圾收集分类-JVM(十四) ZGC收集器 -XX:+UseZGC ZGC(Z Garbage Collector)是在jdk11新加入的低延迟垃圾收集器。 Zgc有四个目标 : 支持至少TB级别堆内存回收。(目前4TB) STW保持在10ms之内。 吞

    2024年02月16日
    浏览(32)
  • JVM-垃圾回收(标记算法,收集器)

    申明:文章内容是本人学习极客时间课程所写,文字和图片基本来源于课程资料,在某些地方会插入一点自己的理解,未用于商业用途,侵删。 原资料地址:课程资料 垃圾回收的基本原理 1 什么是垃圾? 在内存中,没有被引用的对象就是垃圾。 2 如果找到垃圾对象? 引用计

    2024年02月21日
    浏览(39)
  • JVM垃圾回收算法和CMS垃圾收集器

    目录 判断一个对象是否死亡? 1、引用计数法  2、可达性分析算法 三色标记 垃圾收集算法 1、分代收集理论  2、垃圾回收算法 标记-清除 标记-复制 标记-整理 CMS(Concurrent Mark Sweep)收集器 CMS垃圾收集器步骤 CMS垃圾收集器优缺点 垃圾收集需要完成的三件事情: 哪些内存需

    2024年02月10日
    浏览(32)
  • 三种方式查看 JVM 垃圾收集器

            不同版本的 JVM 默认使用的垃圾收集器是不同的,目前的新生代和老年代的垃圾收集器如下图所示,新生代和老年代之间的连线表示这些垃圾收集器可以进行搭配使用         垃圾收集器的名字和  JVM 里面的参数对照表如下,即在 JVM 里面并不是存储的垃圾收

    2024年02月09日
    浏览(28)
  • 温故而知新-JVM垃圾收集器

    标记-清除 复制算法 标记-整理 现在垃圾收集器均采用分代收集策略,新生代由于98%的对象都是朝生夕死,复制算法更合适,只复制还存活的对象,工作量小,所以效率高。显然复制算法不适合老年代,因为老年代中的对象大部分是大对象,且长时间存活,复制算法效率太低

    2024年02月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包