一文读懂G1

前言

G1是JDK9默认的垃圾回收器。想要玩转高版本,高版本的垃圾回收器先了解一下!
本文简单介绍了G1,内存分配策略,GC回收方式,以及G1调优。

什么是G1?

G1(garbage—first)是JVM中的一种垃圾回收器,适用于多核、大内存的服务端,garbage-first意思是总是优先回收价值最大的区域。

-XX:+UseG1GC  开启G1垃圾收集器
-Xmx32g       设定堆内存的最大内存为32G

为什么要使用G1?

G1的出现是为了替换CMS

  • G1有CMS的优点:
    低延迟:G1能充分利用硬件优势(多CPU、多核)来缩短Stop-The-World,很多情况下可以通过并发的方式让程序继续执行。
  • G1针对CMS的问题进行了改进:
    算法优化:CMS使用的mark-sweep标记清除算法会产生内存碎片,G1使用copying算法整理内存,复制的时候完成了堆压缩,不产生内存碎片,有利于程序长时间运行,分配大对象不会因为内存空间不足而提前触发下一次GC。
  • G1的新特性:
    可调控GC:G1能建立可预测的停顿时间模型,设定在M毫秒的时间段内,垃圾回收时间不超过N毫秒。G1不是一个实时收集器,对gc停顿时间的设定并不绝对生效,只是保证高概率在停顿时间模型中完成gc,尽可能满足参数设定。

注: G1为什么可以建立可预测的停顿时间模型?
G1有计划地避免在整个堆中进行全区域的垃圾收集,G1通过优先列表计算各个region里面的垃圾堆积价值(回收获得的空间以及回收所需时间),每次根据允许的收集时间,优先回收价值最大的Region(Garbage-First名称的来由)。G1使用region划分内存空间和设定优先级的回收方式,保证了有限时间内能高效率的回收垃圾,保证了程序的长时间运行。

G1长什么样?

region 区

Serial GC,Parallel GC,CMS GC将整个堆按年代划分,进行分代回收。G1依然是分代垃圾回收器,G1将堆划分为2048个region(大小为1~32M,2的幂次方),每个region从属不同的年代(注意:region并不固定属于某个年代,有时候属于young,有时候属于old,根据其保存对象来决定),每个年代都是一部分region的集合。如图:
G1

-XX:G1HeapRegionSize=16M 设置reigon区域大小,1-32M之间,划分2048个region
-XX:G1NewSizePercent=5   设置young代的堆空间占比,default:5%
-XX:NewRatio=2   设置young与old的比率,default:2
-XX:SurvivorRatio=8 设置Eden与Survivor的比率&#x
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值