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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jquery与vue区别_学jquery还是vue

    jquery与vue区别_学jquery还是vue仅仅从自己使用经验来说下感受。1,vue是一个前端框架,jquery是javacript库,封装了一些js常用的方法,仅此而已。vue有成熟的生态链,mvvm模式,是一个真正的web框架。表现在:1:vue有固定的写法和规定,必须要有一个div来作为容器,绑定事件方法,数据都有固定的地方,数据要写在data里面,方法要写在methods里面。而且绑定事件在dom元素标签上绑定,防止时间太…

    2022年10月9日
    0
  • 图解springmvc 执行流程

    图解springmvc 执行流程核心对象DispatcherServlet核心控制器负责请求,响应,数据的分发。HandlerMapping处理器映射器,负责到controller中,找到对应的方法,返回给核心控制器。HandleAdapter处理适配器,将handle找到的方法执行,执行结果,即ModelAndView数据和视图返回给核心控制器。HttpMessageConvertor消息转换器,数据类型的转换,如日期…ViewResolver视图解析器,核心控制器调度视图解析器,视图解析器,返回视图。核心控制

    2022年6月28日
    28
  • pdf转word文档总结

    pdf转word文档总结今天帮忙进行pdf转word,折腾半天,最终终于搞定了这里介绍的方法分为两种,一种是直接转为图片版的word,也就是不可编辑的;另一种就是转为可编辑的word,目前很多软件都是要收费的~不可编辑的word文档,这个转换原理比较简单,实现的途径相对也比较多一点~http://www.pdfdo.com/pdf-split.aspx 该网址对pdf可以多种处理,格式转换

    2022年6月7日
    29
  • oracle数据库recover和restore的区别

    oracle数据库recover和restore的区别

    2021年9月1日
    104
  • 关于python中format占位符中的 {!} 参数[通俗易懂]

    关于python中format占位符中的 {!} 参数[通俗易懂]在看celery的时候,发现里面有这么一句print('Request:{0!r}'.format(self.request))关于里面的是什么意思翻了一下文档。文档里是这么

    2022年7月5日
    21
  • 线程池参数及配置「建议收藏」

    线程池参数及配置「建议收藏」线程池-线程池参数及配置在实际项目中线程的应用都会使用线程池来管理,线程池的常用参数及配置学习记录。目录线程池-线程池参数及配置一、线程池在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁。如果并发的线程数多,并且每个线程都是…

    2022年5月3日
    90

发表回复

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

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