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
相关推荐
Java虚拟机(JVM)中的垃圾回收器(Garbage Collector, GC)是Java程序自动管理内存的关键组件。垃圾回收器负责识别不再使用的对象并回收它们所占用的内存,以防止内存泄漏并确保程序的稳定运行。理解不同类型的垃圾...
- **G1(Garbage-First)**:新一代垃圾回收器,目标是预测和控制垃圾回收停顿时间。 4. **垃圾回收参数调优** - **JVM选项**:如-Xms, -Xmx设置堆大小,-XX:NewRatio设置新生代与老年代的比例,-XX:...
4. G1(Garbage-First):新一代的垃圾收集器,目标是实现可预测的暂停时间模型。 四、垃圾回收调优 1. 参数调整:例如-Xms和-Xmx设置堆大小,-XX:NewRatio设置新生代和老年代的比例,-XX:SurvivorRatio设定新生代...
6. **Java 7与G1 GC**:2011年,Java 7引入了G1(Garbage First)垃圾回收器,它是一种并行、并发且具有低延迟特性的垃圾回收器,适用于大型应用。 7. **Java 8与元空间**:2014年,Java 8中,永久代被元空间...
- **Parallel GC**:也称为吞吐量优先收集器,多线程进行垃圾回收,提高了垃圾回收的效率,适合CPU资源充足但对响应时间要求不高的场景。 - **Concurrent Mark Sweep (CMS) GC**:并发标记扫描收集器,尽可能减少...
并发收集则是在应用线程运行的同时进行GC,尽可能减少对应用性能的影响,如CMS(Concurrent Mark Sweep)和G1(Garbage-First)垃圾回收器。 7. G1垃圾回收器 G1是Oracle JDK 1.6引入的一种新的垃圾回收器,它结合...
- **并发收集器**:在应用运行的同时进行垃圾回收,减少停顿时间,如CMS(Concurrent Mark Sweep)和G1(Garbage-First)收集器。 每种垃圾回收器都有其适用场景和优化策略,选择合适的垃圾回收器对于提升JVM性能...
HotSpot JVM提供了多种垃圾收集器,如Serial、Parallel、CMS(Concurrent Mark Sweep)和G1(Garbage-First)。CMS收集器以其并发标记阶段而闻名,减少了停顿时间,适合响应时间要求较高的应用。G1收集器则是新一代...
**JVM之垃圾回收器** Java虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行字节码并管理程序运行时的内存。在JVM的内存模型中,垃圾回收(Garbage Collection, GC)是一项重要的功能,它自动识别并清理不再...
- **并发收集器**:如CMS(Concurrent Mark Sweep)和G1(Garbage-First),在应用程序运行时并行进行垃圾回收,减少停顿时间。 JVM的垃圾回收策略和选择取决于应用的需求,如响应时间、内存大小和吞吐量等。...
Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾收集器(Garbage Collector, GC)。本文将全面解析JVM中的七种垃圾收集器,分析它们的特性和适用场景,帮助开发者理解如何优化Java应用的内存...
G1(Garbage-First)收集器是针对大内存环境设计的,能够有效地控制停顿时间。 总的来说,JVM中的内存分配与垃圾回收是一个复杂的过程,涉及众多的算法和策略。理解这些机制对于优化Java应用的性能至关重要。通过对...
- G1(Garbage-First):并行和并发的垃圾回收器,目标是减少停顿时间。 4. **JVM调优** - 参数调整:通过JVM启动参数设置堆大小(-Xms, -Xmx)、新生代与老年代比例(-XX:NewRatio)、存活对象阈值(-XX:...
- **G1(Garbage-First)GC**:新一代的垃圾回收器,目标是预测并控制垃圾回收的停顿时间。 理解JVM内存管理和垃圾回收机制对于优化Java应用程序性能至关重要,开发者可以通过调整JVM参数来定制适合应用需求的内存...
4. **垃圾收集器类型**:HotSpot提供了多种GC策略,如Serial GC、Parallel GC、Parallel Old GC、CMS(Concurrent Mark Sweep)、G1(Garbage-First)和ZGC(Zing Concurrent Low Latency Collector)。每种收集器有...
JVM提供了多种垃圾收集器,如Serial、ParNew、Parallel Scavenge、CMS(Concurrent Mark Sweep)、G1(Garbage-First)等,每种收集器都有其适用场景和优化策略。例如,CMS收集器适用于响应时间要求较高的应用,而G1...
G1是JVM的一种分代垃圾收集器,引入了Region的概念,目标是预测并控制垃圾回收停顿时间。G1不仅在年轻代和老年代之间,还在Region内部进行垃圾回收,解决了CMS的内存碎片问题。G1采用了混合GC策略,可以在一次GC...
垃圾回收相关的JVM选项可以调整这些收集器的行为,例如堆大小(-Xms和-Xmx)、年轻代大小(-Xmn)、永久代大小(-XX:PermSize和-XX:MaxPermSize)等。正确选择和配置这些选项对于优化应用程序性能至关重要。 在实际...