原文出处:http://www.baiming.org/hulianwang/java/15446.1.html
G1垃圾回收器(简称G1 GC)是JDK 7中Java HotSpot VM新引入的垃圾回收器,Java SE 6 Update 14中已经包含了一个G1的体验版本(据51CTO之前的报导,在Java SE 6 u14于6月初登场时,原本Sun的声明是:G1垃圾回收器需要收费方能使用。然而之后不久,Sun表示这是一个误会,修改了原本的发布声明,并表示现在以及将来对G1的使用都是完全免费的),G1是设计用于替代HotSpot低延迟的并行标记/清除垃圾回收器(也叫做CMS)的。
Java 7 G1属性
G1是一个服务端垃圾回收器,有以下属性:
◆并行和并发性:G1利用了当今硬件中存在的并行性,当Java应用程序的线程被停止时,它使用所有可用的CPU(核心,硬件线程等)加速其停止,在停止过程中运行Java线程最小化整个堆栈。
◆代:和其他HotSpot GC一样,G1是一代,意味着它在处理新分配的对象(年轻代)和已经生存了一段时间的对象(年老代)时会不同,它主要集中于新对象上的垃圾回收活动,因为它们是最可能回收的,旧对象只是偶尔访问一下,对于大多数Java应用程序,代的垃圾回收对于替代方案具有重要优势。
◆压缩:和CMS不同,G1会随时间推移对堆栈进行压缩,压缩消除了潜在的碎片问题,确保长时间运行的操作流畅和一致。
◆可预测性:G1比CMS预测性更佳,这都是由于消除了碎片问题带来的好处,再也没有CMS中停止期间出现的负面影响,另外,G1有一个暂停预测模型,允许它满足(或很少超过)暂停时间目标。
Java 7 G1描述
和其它HotSpot GC相比,G1采用了一个非常不同的堆栈布局方法,在G1中,年轻代和年老代之间没有物理隔离,相反,它们之间有一个连续的堆栈,被分成大小一样的区域(region),年轻代可能是一套非连续的区域,年老代也一样,这就允许G1在年轻代和年老代之间灵活地移动资源。
G1中的回收是通过消除暂停发生的,在此期间,幸存者指的是回收集被转移到另一个区域,以便回收区域可以再生,消除暂停是并行的,所有可用的CPU都会参加,大多数消除暂停收集可用的年轻区域,和其它HotSpot GC中的年轻回收是一样的,在暂停期间偶尔也会选择年老区域回收,因为G1在年轻一代回收上还肩负了年老代的回收活动。
和CMS相同的是,G1会定期执行一个并发标记暂停,这个阶段的主要职责是识别哪一个年老区域的垃圾对象是最完整的,因为这些是最有效和最值得回收的,和CMS不同的是,G1不会执行并发清除暂停,相反,最有用的年老区域是通过并发标记暂停标识的,在随后的消除暂停期间进行回收。
使用G1
G1仍然被看做是试验品,可以使用下面两个参数开启它:
-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC 为了设置一个GC暂停时间目标,使用下面的参数:
-XX:MaxGCPauseMillis =50 (暂停时间目标50ms) 使用G1时还可以指定时间间隔,当GC暂停持续时间没有上面给出的时间长时可以这么用:
-XX:GCPauseIntervalMillis =200 (暂停间隔目标200ms) 注意上面两个选项表示的目标,没有承诺和保证,在某些情况下它们可能能够工作,GC不是总是能够执行它们。
另外,年轻代的大小可以明确指定影响消除暂停时间:
-XX:+G1YoungGenSize=512m (年轻代大小512M) G1也使用幸存空间(可能是非连续的区域),它们的大小可以使用一个常见的参数指定,如:
-XX:SurvivorRatio=6 最后,为了运行G1充分发挥其潜力,尝试设置以下两个默认被禁用了的参数,因为它们可能会暴露一个罕见的竞争状态:
-XX:+G1ParallelRSetUpdatingEnabled -XX:+G1ParallelRSetScanningEnabled 注意当设置了-XX:+PrintGCDetails后,G1比起其它HotSpot GC要啰嗦得多,因为它会打印每个GC线程的计时和其它有助于进行故障排除的信息,如果你想使GC日志更简单,请使用-verbosegc参数。
Java 7 G1最新进展
G1开发现在主要集中在遗留的可靠性问题和改善性能,同时也在逐步移除下面的限制:
◆G1不能完全支持JVM工具接口(JVM TI)或Java管理扩展(JMX),因此关于G1的监视和管理工具很可能不能正常工作;
◆G1不支持增量永久性代回收,如果一个应用程序产生了许多类转储,需要永久性代回收,这在完整GC期间是可以实现的;
◆从GC暂停时间来说,G1有时表现比CMS好有时比CMS差。
分享到:
相关推荐
探秘Java 如何像计算机科学家一样思考 pdf
嫦娥奔月PPT模板:探秘中国航天之旅 嫦娥奔月PPT模板:探秘中国航天之旅是一份介绍中国航天事业发展历程的PPT模板。该模板通过catalog分类,介绍了中国航天事业的起源、里程碑事件、未来展望等重要知识点。 一、...
SpringBoot 技术护航:探秘驾校管理系统的高效运行与信息安保
石缝里的新能源:探秘页岩气.pdf
内存管理和垃圾回收是Java的另一大特点。读者会了解到Java虚拟机(JVM)如何自动管理内存,以及对象生命周期的概念,这有助于优化程序性能和防止内存泄漏。 并发编程是现代软件开发中的重要一环。Java提供了丰富的...
"解构客服平台产品:探秘赔付系统的“简历”" 本文档旨在探讨客服平台产品的赔付系统,旨在解决传统的赔付方式中存在的痛点问题,例如无系统化支持、效率低下、数据沉淀不足等问题。通过开发单独的赔付系统,实现...
本文深入解析Java并发编程中的两个关键类:Atomic和Unsafe。这些类在提高Java并发操作的效率和安全性方面扮演着至关重要的角色。原子操作的核心:原子操作是不可分割的操作单元,确保数据的一致性和完整性。Java通过...
- **老年代垃圾回收器:** 如CMS、G1、Parallel Old等,主要关注如何减少回收过程中的暂停时间。 #### 分代垃圾回收器的工作原理 **分代垃圾回收器:** 根据对象的年龄将内存划分为不同的代,如年轻代和老年代,针对...
这些类各自有不同的特性和适用场景,对于理解Java字符串操作至关重要。 首先,`String` 类是最基本的字符串类,它代表不可变的字符序列。这意味着一旦`String`对象被创建,它的内容就不能更改。例如: ```java ...
数据世界的探秘之旅:Java项目的源码揭秘,从数据的角度看项目开发,markdown格式,方便查看
本章节《java项目实践开发指南》的"Chapter7 框架探秘"着重探讨了Java中的核心框架及其在实际项目开发中的应用。框架的理解与熟练使用对于Java程序员来说至关重要,因为它们构成了现代软件开发的基础。 首先,我们...
HotSpot虚拟机提供了多种垃圾收集器,包括Serial、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1等,每种收集器都有自己的特点和适用场景。 - **Serial垃圾收集器**:单线程的年轻代垃圾收集器,适合于单...
垃圾回收算法是 JVM 垃圾回收机制的核心部分,负责回收 Java 对象占用的内存空间。常见的垃圾回收算法有: #### 7.1 标记-清除算法 标记-清除算法是最简单的垃圾回收算法,它首先标记出所有的活动对象,然后清除...
《探秘Java》这本书以其独特的视角和方法,指导读者不仅仅学习Java这门语言的语法,更深入理解其背后的逻辑思考方式,从而像计算机科学家一样思考问题。 从“方法”这一核心概念开始,Java的函数被赋予了更为丰富的...
4. **G1收集器**:将堆划分为多个区域,并跟踪这些区域的垃圾堆积程度,优先回收垃圾最多的区域。 #### 新生代垃圾回收器和老年代垃圾回收器 新生代垃圾回收器包括Serial、Parallel Scavenge和ParNew,主要采用...
本文将深入探秘上海市生活垃圾的循环利用过程,揭示这些垃圾在现代化城市管理体系中所经历的不同命运。 在上海市,每天大约产生1.9万吨生活垃圾,这股巨量的垃圾流来自城市的各个角落,包括居民区、商业区、农贸...
在“探秘Java练习分析与解答”中,我们主要探讨的是Java编程语言的学习与实践,通过对各个章节的练习进行分析和解答,以深入理解和掌握Java的核心概念和技术。以下是各章节练习涉及的知识点详解: 第3章:方法 在这...
### 异常捕获者 - 深入探秘Java异常的分类与处理机制 #### 第一章:初识异常家族 在Java编程语言中,异常处理是一项非常重要的功能,它帮助开发者有效地处理运行时发生的意外情况。Java中的异常分为两大类:**受检...
- **策略**:根据应用的需求选择合适的垃圾回收器和参数配置,例如选择CMS、G1、ZGC等不同的垃圾回收器。 - **目标**:减少GC停顿时间,提高应用性能。 #### 六、运行过程与字节码 - **运行过程**:从类加载、初始...