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. 大于java堆50%的活对象。
2. 对象分配率或者提升非常变化。
3. 不希望长时间垃圾收集或者压缩暂停(超过0.5到1秒)。
4 前景
G1计划长期替换CMS。比较G1和CMS,G1有很多不同,而成为一个比较好的解决方案。其中一个不同是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入口)
G1在JavaOne 2008上的讨论:
http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-5419&yr=2008
相关推荐
自己学习总结JVM垃圾回收机制的结构图,一起分享!!!
JVM垃圾回收器和内存分配策略
资源描述: 1.JVM中[垃圾回收器]的所有内容-pdf 2.资源内容:JVM中[垃圾回收器]所有内容 3.学习目标:了解jvm底层原理 4.特点:简单易懂,容易上手 5.使用说明:需要使用pdf打开
第五节:垃圾回收器 1.1Serial/Serial Old收集器 1.2 ParNew收集器 1.3Parallel Scavenge收集器 1.4Parallel Old收集器 1.5CMS(Current Mark Sweep)收集器 1.6G1收集器 第六节:JVM参数调优 1.1 JVM重要参数介绍...
深入理解JVM垃圾收集算法与垃圾收集器
四大垃圾回收算法:复制算法、标记-清除算法、标记-整理算法、分代收集算法 七大垃圾回收器:Serial、Serial Old、ParNew、CMS、Parallel、Parallel Old、G1 JVM调优:命令行指令,设置堆内存大小的参数
Jvm垃圾回收机制 by linux_14胡嘉辉1.如何确定某个对象是“垃圾”? 2.典型的垃圾收集算法3.典型的垃圾收集器
7种jvm垃圾回收器,这次全部搞懂(csdn)————程序
7种JVM垃圾收集器特点-优劣势-及使用场景.pdf
The Java Platform, Standard Edition HotSpot Virtual Machine Garbage Collection Tuning Guide describes the garbage collection methods included in the Java HotSpot Virtual Machine (Java HotSpot VM) and ...
该文档总结了JVM主要的七种垃圾回收器特点与区别,分别描述了他们作用于堆内存的哪些区域,采用单线程还是多线程工作方式,在运行过程中是否需要暂停其他用户工作线程。是笔者对周志明老师的《深入理解java虚拟机》...
jdk工具介绍JVM垃圾回收23种设计模式 jdk工具介绍JVM垃圾回收23种设计模式 jdk工具介绍JVM垃圾回收23种设计模式
该资源通过图像及文字详细分析回答了JVM垃圾回收机制的三个重要面试问题: 1.哪些垃圾是需要回收的? 判断对象是否需要回收有两种算法。一种是引用计数算法、一种是可达性分析算法。 2.有哪些重要的垃圾回收算法? ...
圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。该思维导图完整的描述了垃圾回收的各个关键点
垃圾回收器与JVM性能监控工具介绍垃圾回收器与JVM性能监控工具介绍ppt。
垃圾回收系列(3):CLR与JVM垃圾回收器的比较扫描.pdf
JVM垃圾回收整理。。。
JVM垃圾回收器和内存分配策略
09 Java基础-JVM垃圾回收-玉峰1
JVM堆相关知识 为什么先说JVM堆? JVM的堆是Java对象的活动空间,程序中的类的对象从中分配空间,其存储着正在运行着的应用程序用到的所有对象。这些对象的建立方式就是那些new一类的操作,当对象无用后,是GC来...