G1的垃圾回收概念

来源:互联网 发布:牧场系统源码 编辑:程序博客网 时间:2024/06/05 15:44

通过市场的力量,不断淘汰旧的行业,把有限的资源让给那些竞争力更强、利润率更高的企业。类似地,硅谷也在不断淘汰过时的人员,从全世界吸收新鲜血液。经过半个多世纪的发展,在硅谷地区便形成只有卓越才能生存的文化。本着这样的理念,GC承担了淘汰垃圾、保存优良资产的任务。


G1 GC在回收暂停阶段会回收最大量的堆内区间(Region),这是它的设计目标,通过回收区间达到回收垃圾的目的。这里只有一个例外情况,这个例外发生在并行标记阶段的清除(Cleanup)步骤,如果G1 GC在清除步骤发现所有的区间都是由可回收垃圾组成的,那么它会立即回收这些区间,并且将这些区间插入到一个基于LinkedList实现的空闲区间队列里,以待后用。因此,释放这些区间并不需要等待下一个垃圾回收中断,它是实时执行的,即清除阶段起到了最后一道把控作用。这是G1 GC和之前的几代GC的一大差别。


G1 GC的垃圾回收循环由三个主要类型组成:年轻代循环[1]、多步骤并行标记循环[2]、混合收集循环[3]。当然,单线程、独占式、高强度的Full GC还是继续存在的,它针对GC的评估失败[4]提供了一种失败保护机制,即强力回收。


在年轻代回收期,G1 GC暂停应用程序线程,然后从年轻代区间移动存活对象到幸存者区间或者老年区间,也有可能是两个区间都会涉及。对于一个混合回收期,G1 GC从老年区间移动存活对象到空闲区间,这些空闲区间也就成为了老年代的一部分。

 



[1] 即Young Collection Cycle。

[2] 即Multistage Concurrent Marking Cycle。

[3] 即Mixed Collection Cycle。

[4] 即Evacuaion failure。



欢迎关注麦克叔叔每晚十点说,有兴趣的朋友可以关注公众号,我们一起交流、一起学习。

原创粉丝点击