G1垃圾收集器-JVM(十三)

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

上篇文章说了CMS垃圾收集器使用以及三色标记如何解决cms的一些问题。分别有初始标记,并发标记,重新标记,并发清理,并发重置。

CMS垃圾收集器&三色标记-JVM(十二)
  • G1收集器(Garbage-First)

-XX:+UseG1GC

这是一款面向服务器的垃圾收集器,主要针对设备多核cpu和大内存的机器。以极高效率满足GC停顿时间要求,还具备高吞吐性能特征。

Region

G1让我们忘记以前的年轻代老年代,但只是物理和以前不同,但是他会分为多个大小相等的小块(Region),jvm最多可以有2048个region。

每个小块分别代表E(eden)、S(survivor)、O(old)、H(humongous)。

一般默认就是划分2048个region,比如堆内存是4096M,则Region是堆的大小除以2048,每个region的大小是2M。推荐默认方式。

(也可以用-XX:G1HeapRegionSize= 来修改他的大小)

所以老年代和年轻代已经在物理上不是连续的,而是分为不同的region集合。

默认年轻代占比百分5,如果堆大小是4096,每个region是2M,那么对应大概100个Region。

可以通过-XX:G1NewSizePercent设置新生代初始占比。

在系统运行的时候也会慢慢给年轻代增加占比,但最大不会超过百分之60。

最大值也可以设置-XX:G1MaxNewSizePercent调整

比例还如之前的比例8:1:1,比如现在100个region,eden则是80个,s0和s1分别是10。

动态变化:一个region之前是老年代,但是做完GC之后可能变成年轻代,说明region区域功能可能动态变化。

G1垃圾收集和前面都是一样的,唯一不同的就是对大对象的处理,G1有专门分配大对象region的区域叫humongous区,而不是让大对象进入老年代中,节约老年代空间,正常大于region百分之50的对象就属于大对象,直接进入humongous,当对象太大的时候,会跨多个humongous存储。fullGC的时候会将humongous一起回收。

(前面说了一个region是2M,也就是大于1M的时候直接进入humongous)

  • G1收集器步奏
  • G1垃圾收集器-JVM(十三),后端,jvm
  1. 初始标记:STW暂停其他线程,记录GC roots直接引用的对象,速度很快
  2. 并发标记(Concurrent Marking):用户线程和GC线程一起运行标记,与CMS的并发标记类似。
  3. 最终标记:STW暂停其他线程,整理一些刚刚标记的对象,与CMS重复标记类似。
  4. 筛选回收(Clearup,STW):
  5. 筛选标记:筛选是对各个region的回收价值和成本进行排序,根据用户所期望的GC停顿进行STW时间来制定回收计划(-XX:MaxGCPauseMillis),如果1000个region满了,这时候默认是200ms,只能回收800个region,这800个region就是Collection set,尽量把gc回收控制在我们指定时间内。这个阶段也可以与用户线程并行,但因为只回收一部分,并且时间可控,所以STW效率可以更高。他是采用复制算法来垃圾回收,所以几乎不会产生碎片。内部使用复制算法,但是从整体来看,像是标记整理算法。

(注意:CMS回收阶段是用户线程一起并发,G1内部太复杂,并没有并发回收,不过到了ZGC,Shenandoah就实现并发收集,Shenandoah可以看做并发升级版本)文章来源地址https://www.toymoban.com/news/detail-575900.html

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

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

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

相关文章

  • JVM(Java Virtual Machine)G1收集器篇

    本文参考《深入理解Java虚拟机》,本文主要介绍G1收集器的收集思想和具体过程(填上一篇文章留下的坑) 本系列其他文章链接: JVM(Java Virtual Machine)内存模型篇 JVM(Java Virtual Machine)垃圾收集算法篇 JVM(Java Virtual Machine)垃圾收集器篇 G1是一款主要面向服务端应用的垃圾

    2024年02月07日
    浏览(43)
  • 从原理聊JVM(二):从串行收集器到分区收集开创者G1

    作者:京东科技 康志兴 随着Java的进化过程,涌现出各种不同的垃圾回收器,从串行执行到并行执行,从高吞吐到低延迟,终极目标就是让开发人员专注于程序的代码书写而无需关注内存管理。 JDK早期出现的垃圾回收器通常单独作用于不同分代,到后期出现的G1开始,才可以

    2023年04月24日
    浏览(36)
  • JVM 垃圾收集器

    重点:CMS,G1,ZGC 主要垃圾收集器如下,图中标出了它们的工作区域、垃圾收集算法,以及配合关系。 Serial 收集器 Serial 收集器是最基础、历史最悠久的收集器。 如同它的名字(串行),它是一个单线程工作的收集器,使用一个处理器或一条收集线程去完成垃圾收集工作。

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

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

    2024年01月20日
    浏览(50)
  • JVM--- 垃圾收集器详细整理

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

    2024年02月19日
    浏览(73)
  • JVM ZGC垃圾收集器

    ZGC(“Z”并非什么专业名词的缩写,这款收集器的名字就叫作Z Garbage Collector)是一款在JDK 11中新加入的具有实验性质[1]的低延迟垃圾收集器,是由Oracle公司研发的。 ZGC收集器 是一款基于Region内存布局的,(暂时)不设分代的,使用了读屏障、染色指针和内存多重映射等技术

    2024年02月10日
    浏览(49)
  • JVM的故事——垃圾收集器

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

    2024年02月10日
    浏览(51)
  • 08-JVM垃圾收集器详解

    上一篇:07-垃圾收集算法详解 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 虽然我们对各个收集器进行比较,但并非为了挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,我们能做

    2024年02月09日
    浏览(49)
  • 深入理解JVM垃圾收集器

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

    2024年04月09日
    浏览(51)
  • ZGC垃圾收集器-JVM(十五)

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

    2024年02月16日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包