G1收集器

G1收集器

什么是G1收集器?
G1收集器是一个服务器式的垃圾收集器,针对多处理器和大容量存​​储器,满足了高可靠性和软实时目标,同时实现高吞吐量目的。 G1是并发标记 - 清除收集器(CMS)的长期替代。整个堆的操作,如全部标记,和应用程序线程同时执行,防止和堆或活数据大小成正比的中断。并发标记提供了 “完全”收集和识别通过压缩排空回收区域的时机。排空在多处理器上并行执行,以减少暂停时间和增加吞吐量。

G1收集器通过几种技术实现这些目标。堆被分成了一组同样大小的堆区,每组是一个连续的虚拟内存区。 G1约定堆区的处理。对象一个​​堆区拷贝到另一个堆区。因此,它不会遇到CMS可能会遇到的碎片问题。总是会有连续可用的空闲空间可以分配,让G1有始终如一的暂停时间,不会随时间发生变化。 G1使用了一个暂停预测模型,以满足用户定义的暂停时间目标。相同的吞吐量下,G1的暂停时间比CMS的平稳。

G1执行一个全局的标记阶段,确定整个堆内的存活对象,之后就会立即知道堆内哪里的区大部分是空的。它将先处理这些区,潜在的提供大量可用空间。通过这种方式,垃圾收集器将获得更多的喘息空间,减少了一个完整GC的概率。这也是为什么它被称为垃圾有限收集(G1)。顾名思义,G1优先集中它的收集和压缩活动在对象可被完全回收的区上,从而提高其效率。

大多数实时收集器在个体对象的高度细化水平上工作,G1在区块层面收集。如果任何区块不包含活的对象,立即回收。用户可以设定一个停顿目标,G1将会评估在之前收集的时间基础上能够收集多少个区块。因此,G1有一个合理精确确的模型,计算收集区块的成本,因此“G1能选择可以一组区块,在给定的暂停时间限制内完成收集,保证高可靠性。”换句话说,G1是不是一个硬实时收集器- 它满足了软实时目标的高可靠性,但不绝对。 G1试图使软件返回结果产生更高的吞吐量,但在实时约束上保持适度节制。G1非常适合有大量存活数据和线程并行的服务器端应用程序。 G1还提供了一些更精细的控制,允许用户指定在一段时间垃圾收集上花费的执行时间的一小部分时间。例如,每花费250ms的执行时间,垃圾收集的时间小于50ms。

G1计划取代在HotSpot JVM的CMS。 CMS和G1之间的主要区别有两个。首先,G1是一个压缩收集器。 G1的契约,足以完全避免细颗粒自由列表分配使用,大大简化了收集部分,最大程度上消除潜在的碎片问题。除了压缩,G1提供比CMS收集器更可预见的垃圾收集暂停,并允许用户设置自己想要的暂停目标。


关键字:Garbage-First Collector 垃圾回收

原文:http://docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值