G1垃圾回收器

1. G1内部是一系列大小相同的Region内存区域,通过参数“-XX:UseG1GC”来指定使用G1垃圾回收器,默认最有有2048个Region,Region的大小可以通过-XX:G1HeapRegionSize参数指定,大小区间只能是1M、2M、4M这种2的幂次方的大小。通过参数"-XX:G1NewSizePercent"设置新生代初始大小,默认为5%。通过参数“-XX:G1MaxNewSizePercent”设置新生代最大占比,最大值为60%。通过参数“-XX:MaxGCPauseMills”设定GC时,系统停顿时长,默认值为200ms,简单理解,当有一定数量的Region被占满之后,分析得知清理垃圾回收清理这些Region时需要大概200ms时,可能触发一次垃圾回收。

例如:“-Xms4096M -Xmx4096M -Xss1M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+UseG1GC”,这样每个Region大小为2M

G1通过复制算法来进行垃圾回收,回收期间需要STW。

上图中的每个Region也会分别被标记为Eden,Survivor,Old和humongous(巨型对象),ygc当Eden内存耗尽时进行,fgc当混合回收来不及时,导致内存占满则进行fgc。

2. G1混合垃圾回收流程

     第一步进行初始标记,GC Roots直接能引用的对象(STW)

     第二步进行并发标记,从GC Roots开始追踪所有存活对象

     第三步最终标记阶段,根据并发标记阶段判断哪些是存活,哪些是垃圾对象(STW)

     第四步混合回收(新生代和老年代一起回收)-XX:InitiatingHeapOccupancyPercent该参数的设定,指定当老年代内存达到一定占比进行混合回收,默认是45%

    “-XX:G1MixedGCCountTarget”参数,在一次混合回收的过程中,最后一个阶段执行几次混合回收,默认值是8次,最后一个阶段,先停止系统运行,混合回收一些Region,再恢复系统运行,接着再次禁止系统运行,混合回收一些Region,反复8次。

   “-XX:G1MixedGCLiveThresholdPercent”,存活对象低于该设定值时进行回收,默认是85%

   “-XX:G1HeapWastePercent”空闲出来的Region达到该设定值时停止回收,即统计出所有可被回收的垃圾占Heap的比例值,默认值是5%,如果超过5%则进行后续多轮mix gc。

3. G1优化

   给JVM的堆区域足够的内存,合理设置“-XX:MaxGCPauseMills”参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
G1(Garbage First)垃圾回收是一种低延迟的垃圾回收,它可以在不影响应用程序吞吐量的情况下,有效地处理大量的内存垃圾。下面是G1垃圾回收的执行流程: 1. 初始标记(Initial Mark):该阶段的目标是标记所有的根对象,并且标记从根对象直接可达的对象。为了达到这个目的,G1垃圾回收会扫描所有的Java线程的栈,以及记录下所有的GC Root。 2. 并发标记(Concurrent Mark):在初始标记之后,G1垃圾回收会开始并发的标记所有从根对象可达的对象。这是一个并发的过程,不会阻塞应用程序的执行。 3. 最终标记(Final Mark):在并发标记之后,G1垃圾回收会再次暂停应用程序的执行,以完成所有未被标记的存活对象的标记。这个过程与初始标记是类似的。 4. 筛选回收(Live Data Counting and Evacuation):在最终标记之后,G1垃圾回收会计算每个区域中存活的数据量。然后,它会选定一些区域作为回收集(Collection Set),将这些区域中的存活对象复制到空闲的区域中,并将这些区域标记为可回收的。 5. 清除(Cleanup):在筛选回收之后,G1垃圾回收会开始清理所有被标记为可回收的区域。 需要注意的是,G1垃圾回收是一个全局垃圾回收,因此它不仅仅会处理单个堆区域的垃圾回收,而是会处理整个Java堆。同时,它还会根据应用程序运行的情况,动态地调整回收集的大小,以达到最佳的垃圾回收效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值