G1垃圾收集器

G1垃圾收集器

在讲G1垃圾收集器前可以先了解下G1垃圾收集器的背景知识,它在JDK 7 时确立项目目标,Oracle公司指定了该计划。直到JDK 7 Update 4时才被认为达到了商用程度。也被Oracle官方称为“全功能垃圾收集器”。

G1的区域划分

G1是一款主要面向服务端应用的垃圾收集器,开创了收集器面向局部收集的设计思路和基于Region的内存布局形式。它垃圾收集范围不再是整个新生代或老年代,而是可以面向堆内存任何部分来组成回收集,是哪块内存中存放的垃圾数量最多,回收收益最大就回收那块,这就是G1收集器的Mixed GC模式。
G1不再坚持固定大小以及固定数量的分代区域划分,而是把连续的Java堆划分为多个大小相等的独立区域(Region).每一个Region都可以根据需要,扮演新生代的Eden空间,Survivor空间,或老年代。

G1的回收思路

G1是通过建立可预测的停顿时间模型来回收的,因为它将Region作为单次回收的最小单元,即每次收集到的内存空间都是Region大小的整数倍,可以有计划的避免在整个Java堆中进行全区域的垃圾手机。它会通过跟踪各个Region里面的垃堆积的“价值”大小,价值即回收所获得的空间大小以及回收所需时间的经验值,然后再后台维护一个优先级列表,每次根据用户设定允许的收集停顿时间,优先处理回收价值收益最大的那些Region,这也是"Garbage First"名字的由来。
但又一个问题是Region里面存在跨Region引用对象怎么解决?它使用记忆集避免全堆作为GC Roots扫描,通过记忆集会记录下别的Region指向自己的指针,并标记这些指针分别在哪些卡页的范围内,G1的记忆集在存储结构的本质上是一种哈希表,Key是别的Region的起始地址,Value是一个集合,里面存储的元素是卡表的索引号。这种“双向”的卡表结构(卡表是“我指向谁”,这种结构还记录了“谁指向我”)。G1由于Region数量比传统收集器的分代数量要多。因此G1有着更高的内存占用负担。
并发标记阶段如何保证收集线程与用户线程互不干扰地运行,首先要解决的是用户线程改变对象引用关系时,必须保证其不能打破原本的对象图结构,导致标记结果出现错误。它为每一个Region设计了两个名为TAMS的指针,把Region中的一部分空间划分出来用于并发回收过程中的新对象分配,并发回收时新分配的对象地址都必须要在这两个指针位置上。G1收集器默认在这个地址以上的对象被隐士标记过,即它们是默认存活的,不纳入回收范围。

G1收集器的运作过程大致划分为以下四个步骤:

  • 初始标记:标记一下GC Roots能直接关联到的对象,并且修改TAMS指针的值,让下一阶段用户线程并发运行时,能正确地在可用Region中分配新对象。
  • 并发标记:从GC Root开始对堆中对象进行可达性分析,递归扫描整个堆里地对象图,找出要回收地对象,这阶段耗时较长,但可与用户程序并发执行,它使用原始快照实现了标记阶段的并发。
  • 最终标记:对用户线程做另一个短暂地暂停,用于处理并发阶段结束后仍遗留下来地最后那少量地SATB记录。
  • 筛选回收:负责更新Region地统计数据,对各个Region的回收价值和成本进行排序,根据用户所期望的停顿时间来指定回收计划,可以任选多个Region构成回收集,然后把决定回收的那一部分Region的存货对象复制到空的Region中,再清理掉整个旧Region的全部空间。这里必须暂停用户线程。

请添加图片描述

以上是我对G1垃圾收集器简单的理解,G1它并不是追求一次把整个Java对清理干净,而是追求能够应付应用的内存分配速率,这样应用在分配,同时收集器在收集,只要收集的速度能跟得上对象分配的速度,那一切都会达到预期。

总结

G1也是一款可以并发工作的收集器,它使用Region概念来划分java堆区域,记忆集来解决跨Region引用对象。依靠TAMS的指针解决收集线程与用户线程互不干扰。以后会多总结些JVM相关知识,也不能只学专业相关知识,沟通也要注意,听得懂讲的话,珍惜要珍惜的人,我们不能只在乎自己的感受。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值