`
leichenlei
  • 浏览: 124255 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jvm垃圾回收——垃圾优先Garbage-First收集器

 
阅读更多

http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html

 转载请标明出处,多谢。

 

1 简介

       Garbage-First(G1)垃圾收集器在Oracle JDK 7 update 4和后续版本中完全支持。G1收集器是服务器模式(server-style)收集器,是为大内存,多处理器机器设计的。它高可能性的满足暂停时间目标,同时实现高吞吐量。整堆(Whole-heap)操作,比如全局标记,和应用线程并发执行,这和堆或者活数据(live-data)的大小成比例防止中断。

2 技术说明

       G1收集器通过一系列技术实现了高性能和暂停时间目标。

       堆被分成相等的、连续的区域。G1的并发、全局标记阶段决定整个堆的对象活性。编辑阶段完成之后,G1知道了呢个区域更空(empty)。它首先收集这些区域,这些区域通常有大量的可用空间。这是为什么这个收集方法叫Garbage-First。顾名思义,G1集中搜集和压缩满是可回收对象,即垃圾的区域。G1使用暂停预测模型,满足用户定义的暂停时间目标,基于暂停时间目标选择区域的数量。

       G1为了回收而标记的区域,使用疏散算法收集垃圾。G1从一个或多个区域复制对象到一个单独的区域。在这个过程中,压缩和释放了内存。疏散算法在多处理器下并行执行,这样减少暂停时间和增加吞吐量。因此,每个垃圾收集,G1都为了减少碎片连续工作,在用户定义的暂停时间内工作。这超过了前面两个方法的能力。CMS (Concurrent Mark Sweep )垃圾收集不压缩。ParallelOld只是整堆(whole-heap)压缩,这导致相当大的暂停时间。

       需要十分注意,G1不是实时(real-time)收集器。它高可能性满足暂停时间目标,但是不是绝对必须的。基于上次收集的数据,G1估计收集多少个区域能在用户指定目标时间内。因此,收集器有一个以收集区域为代价的合理的精确模型,它使用这个模型决定哪个、多少个区域被收集,能过在目标暂停时间之内。

       关于使用和配置G1的更多信息,看命令行选项。

3 推荐使用G1的情况

       G1的首要焦点是提供一个解决方案,来满足需要巨大堆、有限的GC延迟的应用。这意味着,堆大小大于6GB或者更大,同时稳定的、可预言的、低于0.5秒的、暂停时间。

       目前,使用ParallelOld或者CMS的应用,可以切换到G1收集器,如果应用有一个或者多个下面情况:

1.       大于java50%的活对象。

2.       对象分配率或者提升非常变化。

3.       不希望长时间垃圾收集或者压缩暂停(超过0.51秒)。

4 前景

       G1计划长期替换CMS。比较G1CMSG1有很多不同,而成为一个比较好的解决方案。其中一个不同是G1是压缩收集器。G1充分压缩,完全避免使用细粒度(fine-grained)的空闲列表来分配,而是依赖区域。这个相当简化了收集器,很大的消除了有效碎片问题。还有,G1提供比CMS收集器更可预言的垃圾收集暂停,允许用户指定渴望暂停目标。

       如果你有兴趣改善G1,请试试看,通过OpenJDK和邮件hotspot-gc-use@openjdk.java.net反馈,

5 资源

HotSpot GC的描述: Memory Management in the Java HotSpot Virtual Machine White Paper》:

http://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf

 

原始CMS文章: Printezis, T. and Detlefs, D. 2000. 一个分代、并发(mostly-concurrent)垃圾收集器。《Proceedings of the 2nd international Symposium on Memory Management (Minneapolis, Minnesota, United States, October 15 - 16, 2000)》:

http://portal.acm.org/citation.cfm?id=362422.362480 (进入ACM入口)

 

原始G1文章: Detlefs, D., Flood, C., Heller, S., and Printezis, T. 2004. Garbage-first垃圾收集。《Proceedings of the 4th international Symposium on Memory Management (Vancouver, BC, Canada, October 24 - 25, 2004)》:

http://portal.acm.org/citation.cfm?id=1029879 (进入ACM入口)

 

G1JavaOne 2008上的讨论:

http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-5419&yr=2008

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics