Java虚拟机——G1垃圾收集器

1:是什么

G1是⼀款⾯向服务端应⽤的垃圾收集器,JDK1.7才正式引入,G1堆空间是一个被分成许多固定大小区域的内存块。 

 

      图片中的颜色表明了哪个区域被关联上什么角色。活跃对象从一个区域疏散(复制、移动)到另一个区域。区域被设计为并行的方式收集,可以暂停或者不暂停所有的其它用户线程。

     明显的区域可以被分配成Eden、Survivor、Old区域。另外,有第四种类型的区域叫做极大区域(Humongous regions)。这些区域被设计成保持标准区域大小的50%或者更大的对象。它们被保存在一个连续的区域集合里。最后,最后一个类型的区域就是堆空间里没有使用的区域。

2:特点 

G1 中每个 Region 都有⼀个与之对应的 Remembered Set,当进⾏内存回收时,在 GC 根节 点的枚举范围中加⼊ Remembered Set 即可保证不对全堆扫描也不会有遗漏 检查Reference 引⽤的对象是否处于不同的Region。

此部分强烈建议参考 https://www.cnblogs.com/aspirant/p/8663872.html

3:G1 收集器的运作⼤致可划分为以下⼏个步骤

  • 初始标记(Initial Marking--标记⼀下 GC Roots 能直接关联到的对象
  • 并发标记(Concurrent Marking---GC Root 开始对堆中对象进⾏可达性分析,找出存活的对象,这阶段耗时较⻓,但可与⽤户程序并发执⾏ 。
  • 最终标记(Final Marking) ---为了修正在并发标记期间因⽤户程序继续运作⽽导致标记产⽣ 变动的那⼀部分标记记录。虚拟机将这段时间对象变化记录在线程 Remembered Set Logs ⾥⾯,最终标记阶段需要把 Remembered Set Logs的数据合并到 Remembered Set
  • 筛选回收(Live Data Counting and Evacuation)

4:G1的优势有哪些 

空间整合:基于标记⼀整理算法实现为主和Region之间采⽤复制算法实现的垃圾收集 可预测的停顿:这是 G1 相对于 CMS 的另⼀⼤优势,降低停顿时间是 G1 CMS 共同的关 注点,但 G1 除了追求低停顿外,还能建⽴可预测的停顿时间模型

G1 之前的其他收集器进⾏收集的范围都是整个新⽣代或者⽼年代,⽽ G1 不再是这样。使 ⽤ G1 收集器时,Java 堆的内存布局就与其他收集器有很⼤差别,它将整个 Java 雄划分为多 个⼤⼩相等的独⽴区域(Region),虽然还保留有新⽣代和⽼年代的概念,但新⽣代和⽼年代不再是物理隔髙的了,它们都是⼀部分 Region(不需要连续)的集合。 G1 收集器之所以能建⽴可预测的停顿时间模型,是因为它可以有计划地避免在整个 Java 堆 中进⾏全区域的垃圾收集。G1 跟踪各个 Regions ⾥⾯的垃圾堆积的价值⼤⼩(回收所获得的 空间⼤⼩以及回收所需时间的经验值),在后台维护⼀个优先列表,每次根据允许的收集时 间,优先回收价值最⼤的 Region(这也就是 Garbage- Firsti 名称的来由)。这种使⽤ Region 划分内存空间以及有优先级的区域回收⽅式,保证了 G1 收集器在有限的时间内可以 获取尽可能⾼效率

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值