JVM G1垃圾回收器详细解析

G1内存布局

Garbage First(简称G1)收集器摒弃了传统垃圾收集器的严格的内存划分,而是采用了基于Region的内存布局形式和局部回收的设计思路。
在这里插入图片描述
G1垃圾收集器把Java堆划分为2048个大小相等的独立的Region,每个Region大小取值范围为1-32MB,且必须为2的N次幂参数,可以通过-XX:G1HeapRegionSize设定,-XX:G1HeapRegionSize默认为0,此时Region的大小采用Java堆大小/2048的计算公式来确定,取值为最接近的2的N次幂数值。

Region有四种:Eden、survivor、Old、Humongous(用于存储超过1.5个region的大对象),空白表示未使用区域。

G1的特点

分代收集: G1依然属于分代垃圾回收器,它会区分年轻代和老年代,年轻代依然有Eden和Survivor,但是从堆的结构上看,年轻代和老年 代不再物理隔离,而是逻辑上的概念;不要求整个eden、survivor区连续的,也不再坚持固定大小和数量。
避免内存碎片: 有利于程序长时间运行,分配大对象时不会因为无法找到连续的内存空间而提前触发下一次GC。
可预测的停顿时间: G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间片段内,消耗在垃圾回收上的时间不得超过N毫秒,可以通过参数-XX:MaxGCPauseMillis设置。 由于分区的原因, G1跟踪各个Region里面的垃圾堆积的价值大小(回收所获得的空间大小以及回收所需要的时间),在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region。保证G1收集器在有限的时间内获取尽可能高的收集效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值