G1 收集器调优

G1 收集器调优翻译:http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html  学习如何适配、调优G1gc以用于评估、分析和性能优化。     G1收集器是用于hotspotJVM的低停顿、适合服务器的分代垃圾收集器。G1GC使用并发和并行阶段来获得目标停顿时间和维持优秀的吞吐量。当G1G

大家好,又见面了,我是你们的朋友全栈君。

翻译:http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html

   学习如何适配、调优G1 gc以用于评估、分析和性能优化。

   

      G1 收集器 是用于hotspot JVM 的低停顿、适合服务器的分代垃圾收集器。G1 GC 使用并发和并行阶段来获得目标停顿时间和维持优秀的吞吐量。

当G1 GC 认为有必要进行垃圾回收时,首先回收存活数据最少的区域(garbage first)

    

   GC是一个内存管理工具。G1 GC通过以下操作来达成自动内存管理:

  • 在年轻代分配对象,将老对象放到老年代。
  • 通过并发(并行)标记阶段在老年代找到存活对象,java堆的占用率超过默认门槛值时hotspot JVM触发这个标记阶段。
  • 通过并行复制以压缩存活对象来回收空闲内存。

   在这里我们看看如何适配、调优G1 gc以用于评估、分析和性能优化–假设我们对于java垃圾回收有基本的了解。

   

   G1 GC 是分区和分代的垃圾回收器,就是说Java堆被分成多个同等大小的区。JVM一起动就设置好区的大小。区的大小根据堆的大小不同在1M到32M之间。

区的数量不多于2048个。 eden, survivor和老年代是逻辑分代,不是连续的。

   G1 GC 有一个试图达到的目标停顿时间(软实时)。回收年轻代时G1 GC调整年轻代大小来达到软实时目标。混合回收的时候,G1 GC 调整基于一个目标混合回收数量回收的老年代区的数量、堆里每个区的存活对象百分比、整体可接受的堆浪费比例。


  G1 GC 通过从一个或者多个区里增量并行复制存活对象到不同的新的区里进行压缩来减少堆的碎片。目标是从有最多可回收空间的区开始,在试图不超出目标停顿时间的同时尽可能回收多的堆空间。


  G1 GC使用独立的RSets来跟踪区里的引用,单独的RSets使并行和单独的区回收成为可能,因为只有这个区的RSets被扫描查找对这个区引用,而不是堆的所有RSets。

G1 GC使用post-write barrier来记录堆的变化和并且更新RSets。


   垃圾回收阶段

   除了构成stop-the-world (STW)年轻代和混合垃圾回收的疏散停顿,G1 GC也有并行、并发和多阶段标记循环。G1 GC使用在循环标记开始阶段对堆里的存活对象获取快照的Snapshot-At-The-Beginning (SATB)算法。存活对象集合由快照里的存活对象和从刚开始标记循环的时候分配的堆里的存活对象组成。G1 GC标记算法使用pre-write barrier来记录和标记那些属于逻辑快照一部分的对象。

  

   年轻代垃圾回收

   G1 GC满足大部分增加到eden区集合的区的内存分配请求,在年轻代GC阶段, G1GC回收eden区和前一次垃圾回收产生的survivor区。eden和survivor区的存活对象被复制或者疏散到新的区集合里。一个对象的目标区由对象的年龄决定:足够大年龄的对象被疏散到老年代区,否则到survivor区并且包含到下一次年轻代或者混合GC的CSet里。


 混合垃圾回收

刚成功完成并发标记循环,G1 GC就从进行年轻代GC转换成混合GC。在混合GC阶段,G1GC 选择性地增加一些老区到要被回收的eden和survivor区里。老区的数量由下面讨论的一些标记控制。G1 GC 收集了足够的老区以后,G1返回开始进行年轻代GC直到下一次标记循环结束。


  标记循环的各阶段

  •  初级标记阶段:标记根。这个阶段是依托在一个正常的STW 年轻代GC上。
  • 根区扫描阶段:G1 GC 扫描初级标记的survivor区查找对老年代的引用,并且标记被引用的对象。这个阶段和应用并发执行,并且必须在下一次 年轻代GC可以开始前完成。
  • 并发标记阶段:G1 GC在整个堆里找到可达存活对象。这个阶段和应用并发执行,并且可以年轻代GC中断。
  • 重新标记阶段:是 STW收集并且帮助完成标记循环。G1 GC放出SATB 缓存,跟踪没被访问的存活对象,进行引用处理。
  • 清除阶段:进行STW的统计操作和RSets洗涤操作。在统计阶段,识别完全空的区和混合GC候补。清除阶段进行重置和返回空区给空闲列表时是部分并发。

    

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137619.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月5日 下午5:40
下一篇 2022年5月5日 下午5:40


相关推荐

  • 卷积与转置卷积

    卷积与转置卷积当正向卷积步长不为1时(常常可能为2),转置卷积步长为: 转置卷积填充由正向卷积的卷积核和填充决定:  转置卷积的核和正向卷积一样:转置卷积的输出公式:     转置卷积又称微步卷积(“微步”的含义指:新的步长为1,而之前的步长为2,使得转置卷积的滑窗处理相比较卷积的“小”。),可以视作传统卷积操作的一种“逆向”传递过程;并且,转置卷积受“正向”卷积的参数约束,即步长stride和零填充…

    2022年6月21日
    34
  • TLSF算法分析[通俗易懂]

    TLSF算法分析[通俗易懂]注:本文的大部分内容摘录自论文《TLSF:aNewDynamicMemoryAllocatorforReal-TimeSystems》,可以通过“科学上网”访问如下链接阅读原文:http://www.gii.upv.es/tlsf/files/ecrts04_tlsf.pdf。什么是TLSFTLSF是TwoLevelSegregatedFitmemoryal

    2022年6月30日
    24
  • 安防类基础计算机知识,谁能给我一份安防监控基础知识汇总?

    安防类基础计算机知识,谁能给我一份安防监控基础知识汇总?你好,安防监控基础知识汇总:控制部分是整个系统的“心脏”和“大脑”,是实现整个系统功能的指挥中心。控制部分主要由总控制台(有些系统还设有副控制台)组成。总控制台中主要的功能有:视频信号放大与分配、图像信号的较正与补偿、图像信号的切换、图像信号(或包括声音信号)的记录、摄像机及其辅助部件(如镜头、云台、防护罩等)的控制(遥控)等等。在上述的各部分中,对图像质量影响最大的是放大与与分配、较正与…

    2022年6月28日
    20
  • Servlet学习笔记-Servlet工作原理和过程

    Servlet学习笔记-Servlet工作原理和过程1、前言  JavaServlet技术简称Servlet技术,是Java开发Web应用的底层技术。由Sun公司于1996年发布,用来代替CGI——当时生成Web动态内容的主流技术。官方文档对Servlet的概述,请参考《Servlet的概述》。2、关键词ServletServlet是JavaEE规范的一种,主要是为了扩展Java作为Web服务的功能。为了方便第三方准守这种规范,Sun公…

    2022年10月5日
    3
  • 程序员法则xiazai_程序员手册

    程序员法则xiazai_程序员手册第六章论剑  我深深的吸了一口气,让自己的激动的心情平息下来。“大家好,很高兴可以和大家合作开发这个项目,我也不浪费大家的时间,下面我就给大家讲一下这个项目的具体构架情况”。一个个的方案才我的嘴里轻松的说出来,每个人都分配到合适的任务,每个人都清楚的明白自己的目的,我全身心的投入指挥当中,我记得BRUCE,也是我程序道路上的领路人之一,曾经在发给我的EMAIL中说过:“许,你编写的程序让我感受到

    2022年10月7日
    6
  • autocomplete=”off” inpu属性

    autocomplete=”off” inpu属性

    2021年10月15日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号