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


相关推荐

  • Android浏览器的插件渲染模式简介

    Android浏览器的插件渲染模式简介简单介绍了Android浏览器的插件渲染模式(bitmap模式和surface模式)

    2022年5月14日
    42
  • 王艳茹网课答案创业基础超星尔雅答案2021

    王艳茹网课答案创业基础超星尔雅答案2021创业的概念与功能1【单选题】下列对创业定义理解不正确的一项是(B)A、创业者通过资源整合来达到创业目标B、创业伴随新行业的出现C、寻求机会是产生创业活动的重要一环D、创业伴随新价值的产生创业的要素和阶段1【单选题】创业的关键要素不包括(C)A、机会B、团队C、技术D、资源2【多选题】创业可分为哪些阶段(ABCD)A、机会识别B、资源整合C、新企业创办D、企业生存3【多选题】下列说法中正确的有(ABC)A、商业机会是创业过程的重…

    2022年6月6日
    62
  • [弗曼学习法] Study for learning methods

    [弗曼学习法] Study for learning methods第一步 -选择一个你想要理解的概念    选择一个你想要理解的概念, 然后拿出一张白纸, 把这个概念写在白纸的最上边.第二步-设想一种场景,你正要向别人传授这个概念    在白纸上写下你对这个概念的解释, 就好像你正在教导一位新接触这个概念的学生一样. 当你这样做的时候, 你会更清楚地意识到关于这个概念你理解了多少, 以及是否还存在理解不清的地方.第三步-如果你感觉卡壳了…

    2022年6月12日
    43
  • activiti动态新增任务节点_activity流程图

    activiti动态新增任务节点_activity流程图前言在上一篇,我们演示了如何基于组任务进行审批,其实从任务分类上看,属于单实例任务,即每个审批节点只有一个任务实例,为什么这么说呢?这就要说到activity的多实例任务了。activity对于单个审批节点来说,可能存在需要多个审批人的场景,即只有多个人审批完毕这个节点才算结束,通俗来说,就是我们熟悉的会签(多个人审批通过)以及或签(某个人审批通过),下面我们来演示一下这种场景的使用1、定义流程文件这里需要说明的是,节点的其他定义都类似,但是配置某个节点为多实例的时候,需要配置的地方如图中所示,即

    2022年10月8日
    0
  • 3d游戏建模全解[通俗易懂]

    3d游戏建模全解[通俗易懂]目前市面上随着3D游戏的兴起和VR的盛行,越来越多人对网络游戏越来越热衷,3D游戏建模设计师的需求也越来越广泛,市场缺口大,人才需求供不应求。但在大多数人的印象中,这个行业似乎很难入门,没有美术基础,好像丝毫没有机会进入这个行业。真的是这样吗?3D建模3D建模通俗来讲就是通过三维制作软件构建出具有三维数据的模型。在3DMAX中,建模各项最首要的就是感觉。需要感觉每个部件的大小。感觉各个部位所需要使用的材质、颜色等。需要把控整体的颜色效果。而这些可以说都和美术的基础挂钩的,尤其是颜色。颜色

    2022年5月11日
    42
  • sublime text 2or3 设置和注册码licenses

    sublime text 2or3 设置和注册码licensessublimetextpreferrences-settings-userconfig:{“caret_style”:”phase”,”font_size”:12,”highlight_line”:true,”highlight_modified_tabs”:true,”ignored_packages”:[“Vintage”]}

    2022年7月14日
    19

发表回复

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

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