`
leichenlei
  • 浏览: 128165 次
  • 性别: 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

 

分享到:
评论

相关推荐

    JVM中[垃圾回收器]的所有内容-pdf

    Java虚拟机(JVM)中的垃圾回收器(Garbage Collector, GC)是Java程序自动管理内存的关键组件。垃圾回收器负责识别不再使用的对象并回收它们所占用的内存,以防止内存泄漏并确保程序的稳定运行。理解不同类型的垃圾...

    JVM 垃圾回收(GC)

    - **G1(Garbage-First)**:新一代垃圾回收器,目标是预测和控制垃圾回收停顿时间。 4. **垃圾回收参数调优** - **JVM选项**:如-Xms, -Xmx设置堆大小,-XX:NewRatio设置新生代与老年代的比例,-XX:...

    JVM的垃圾回收机制详解和调优

    4. G1(Garbage-First):新一代的垃圾收集器,目标是实现可预测的暂停时间模型。 四、垃圾回收调优 1. 参数调整:例如-Xms和-Xmx设置堆大小,-XX:NewRatio设置新生代和老年代的比例,-XX:SurvivorRatio设定新生代...

    JVM历史发展和内存回收笔记

    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**:并发标记扫描收集器,尽可能减少...

    JVM之基本的垃圾回收算法汇总

    并发收集则是在应用线程运行的同时进行GC,尽可能减少对应用性能的影响,如CMS(Concurrent Mark Sweep)和G1(Garbage-First)垃圾回收器。 7. G1垃圾回收器 G1是Oracle JDK 1.6引入的一种新的垃圾回收器,它结合...

    JVM垃圾回收(GC)原理知识.pdf

    - **并发收集器**:在应用运行的同时进行垃圾回收,减少停顿时间,如CMS(Concurrent Mark Sweep)和G1(Garbage-First)收集器。 每种垃圾回收器都有其适用场景和优化策略,选择合适的垃圾回收器对于提升JVM性能...

    JVM垃圾回收及监控优化1

    HotSpot JVM提供了多种垃圾收集器,如Serial、Parallel、CMS(Concurrent Mark Sweep)和G1(Garbage-First)。CMS收集器以其并发标记阶段而闻名,减少了停顿时间,适合响应时间要求较高的应用。G1收集器则是新一代...

    JVM之垃圾回收器

    **JVM之垃圾回收器** Java虚拟机(JVM)是Java编程语言的核心组成部分,它负责执行字节码并管理程序运行时的内存。在JVM的内存模型中,垃圾回收(Garbage Collection, GC)是一项重要的功能,它自动识别并清理不再...

    JVM垃圾回收(GC)原理归纳.pdf

    - **并发收集器**:如CMS(Concurrent Mark Sweep)和G1(Garbage-First),在应用程序运行时并行进行垃圾回收,减少停顿时间。 JVM的垃圾回收策略和选择取决于应用的需求,如响应时间、内存大小和吞吐量等。...

    JVM垃圾收集器全面详解

    Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾收集器(Garbage Collector, GC)。本文将全面解析JVM中的七种垃圾收集器,分析它们的特性和适用场景,帮助开发者理解如何优化Java应用的内存...

    JVM初探- 内存分配、GC原理与垃圾收集器

    G1(Garbage-First)收集器是针对大内存环境设计的,能够有效地控制停顿时间。 总的来说,JVM中的内存分配与垃圾回收是一个复杂的过程,涉及众多的算法和策略。理解这些机制对于优化Java应用的性能至关重要。通过对...

    jvm基础知识与调优-jvm-training.zip

    - G1(Garbage-First):并行和并发的垃圾回收器,目标是减少停顿时间。 4. **JVM调优** - 参数调整:通过JVM启动参数设置堆大小(-Xms, -Xmx)、新生代与老年代比例(-XX:NewRatio)、存活对象阈值(-XX:...

    JVM内存管理和垃圾回收

    - **G1(Garbage-First)GC**:新一代的垃圾回收器,目标是预测并控制垃圾回收的停顿时间。 理解JVM内存管理和垃圾回收机制对于优化Java应用程序性能至关重要,开发者可以通过调整JVM参数来定制适合应用需求的内存...

    jdk20-hotspot-virtual-machine-garbage-collection-tuni

    4. **垃圾收集器类型**:HotSpot提供了多种GC策略,如Serial GC、Parallel GC、Parallel Old GC、CMS(Concurrent Mark Sweep)、G1(Garbage-First)和ZGC(Zing Concurrent Low Latency Collector)。每种收集器有...

    jvm内存基本结构及垃圾回收

    JVM提供了多种垃圾收集器,如Serial、ParNew、Parallel Scavenge、CMS(Concurrent Mark Sweep)、G1(Garbage-First)等,每种收集器都有其适用场景和优化策略。例如,CMS收集器适用于响应时间要求较高的应用,而G1...

    JVM GC问题和垃圾回收器讲解.pdf

    G1是JVM的一种分代垃圾收集器,引入了Region的概念,目标是预测并控制垃圾回收停顿时间。G1不仅在年轻代和老年代之间,还在Region内部进行垃圾回收,解决了CMS的内存碎片问题。G1采用了混合GC策略,可以在一次GC...

    细述 Java垃圾回收机制→Types of Java Garbage Collectors 1

    垃圾回收相关的JVM选项可以调整这些收集器的行为,例如堆大小(-Xms和-Xmx)、年轻代大小(-Xmn)、永久代大小(-XX:PermSize和-XX:MaxPermSize)等。正确选择和配置这些选项对于优化应用程序性能至关重要。 在实际...

Global site tag (gtag.js) - Google Analytics