• <menuitem id="ysr28"><object id="ysr28"></object></menuitem>
    <div id="ysr28"></div><div id="ysr28"><s id="ysr28"></s></div>
    <dl id="ysr28"><menu id="ysr28"></menu></dl>
    <tbody id="ysr28"></tbody>
  • <sup id="ysr28"><menu id="ysr28"></menu></sup>
  • <dl id="ysr28"></dl>
    <dl id="ysr28"><menu id="ysr28"></menu></dl>
    首页 | 社区 | 博客 | 招聘 | 文章 | 新闻 | 下载 | 读书 | 代码
    亲,您未登录哦! 登录 | 注册

    探秘Java 7新增垃圾回收器G1特性

    打印文章

    分享到:
    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利用了当今?#24067;?#20013;存在的并行性,当Java应用程序的线程被停止时,它使用所有可用的CPU(核心,?#24067;?#32447;程等)加速其停止,在停止过程中运行Java线程最小化整个堆栈。

      ◆代:和其他HotSpot GC一样,G1是一代,意味着它在处理新分配的对象(年轻代)和已经生存了一段时间的对象(年老代)时会不同,它主要集中于新对象上的垃圾回收活动,因为它们?#20146;?#21487;能回收的,旧对象只是偶尔访问一下,对于大多数Java应用程序,代的垃圾回收对于替代方案具有重要优势。

      ◆压缩:和CMS不同,G1会随时间推移对堆栈进行压缩,压缩消除了潜在的碎片问题,确保长时间运行的操作流畅和一致。

      ◆可预测性:G1比CMS预测性更佳,这都是由于消除了碎片问题带来的好处,再也没有CMS中停止期间出现的?#22909;?#24433;响,另外,G1有一个暂停预测模?#20572;?#20801;许它满足(或很少超过)暂停时间目标。

      Java 7 G1描述

      和其它HotSpot GC相比,G1采用了一个非常不同的堆栈布局方法,在G1中,年轻代和年老代之间没有物理隔离,相反,它们之间有一个连续的堆栈,被分成大小一样的区域(region),年轻代可能是一套非连续的区域,年老代也一样,这就允许G1在年轻代和年老代之间灵活地移动资源。

      G1中的回收是通过消除暂停发生的,在此期间,幸存者指的是回收集被转移到另一个区域,?#21592;?#22238;收区域可以再生,消除暂停是并行的,所有可用的CPU都会参加,大多数消除暂停收集可用的年轻区域,和其它HotSpot GC中的年轻回收是一样的,在暂停期间偶尔?#19981;?#36873;择年老区域回收,因为G1在年轻一代回收上还肩负了年老代的回收活动。

      和CMS相同的是,G1会定期执行一个并发标记暂停,这个阶段的主要职责是识别哪一个年老区域的垃圾对象?#20146;?#23436;整的,因为这些?#20146;鈑行?#21644;最?#26723;?#22238;收的,和CMS不同的是,G1不会执行并发清除暂停,相反,最有用的年老区域是通过并发标记暂停标识的,在随后的消除暂停期间进行回收。

      使用G1

      G1仍然被看做是试验品,可以使用下面两个?#38382;?#24320;启它:

      -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC 为了设置一个GC暂停时间目标,使用下面的?#38382;?br>
      -XX:MaxGCPauseMillis =50  (暂停时间目标50ms) 使用G1时还可以指定时间间隔,当GC暂停?#20013;?#26102;间没有上面给出的时间长时可以这么用:

      -XX:GCPauseIntervalMillis =200  (暂停间隔目标200ms) 注意上面两个选项表示的目标,没有承诺和保证,在某些情况下它们可能能够工作,GC不?#20146;?#26159;能够执行它们。

      另外,年轻代的大小可以明?#20998;?#23450;影响消除暂停时间:

      -XX:+G1YoungGenSize=512m (年轻代大小512M) G1也使用幸存空间(可能是非连续的区域),它们的大小可以使用一个常见的?#38382;?#25351;定,如:

      -XX:SurvivorRatio=6 最后,为了运行G1充分发挥其潜力,尝试设置以下两个默认被禁用了的?#38382;?#22240;为它们可能会暴露一个罕见的竞争状态:

      -XX:+G1ParallelRSetUpdatingEnabled   -XX:+G1ParallelRSetScanningEnabled  注意当设置了-XX:+PrintGCDetails后,G1比起其它HotSpot GC要啰嗦得多,因为它会打印每个GC线程的计时和其它有助于进行?#25910;?#25490;除的信息,如果你想使GC日志更简单,请使用-verbosegc?#38382;?br>
      Java 7 G1最新进展

      G1开发现在主要集中在遗留?#30446;?#38752;性问题和改善性能,同时也在逐步移除下面的限制:

      ◆G1不能完全支持JVM工具接口(JVM TI)或Java管理扩展(JMX),因此关于G1的监视和管理工具很可能不能正常工作;

      ◆G1不支持增量永久性代回收,如果一个应用程序产生了许多类转储,需要永久性代回收,这在完整GC期间是可以实现的;

      ◆从GC暂停时间来说,G1有时表现比CMS好有时比CMS差。

      原文:Java HotSpot Garbage Collection

    本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

    编程爱好者论坛

    本栏最新文章

    双色球红球杀号方法
  • <menuitem id="ysr28"><object id="ysr28"></object></menuitem>
    <div id="ysr28"></div><div id="ysr28"><s id="ysr28"></s></div>
    <dl id="ysr28"><menu id="ysr28"></menu></dl>
    <tbody id="ysr28"></tbody>
  • <sup id="ysr28"><menu id="ysr28"></menu></sup>
  • <dl id="ysr28"></dl>
    <dl id="ysr28"><menu id="ysr28"></menu></dl>
  • <menuitem id="ysr28"><object id="ysr28"></object></menuitem>
    <div id="ysr28"></div><div id="ysr28"><s id="ysr28"></s></div>
    <dl id="ysr28"><menu id="ysr28"></menu></dl>
    <tbody id="ysr28"></tbody>
  • <sup id="ysr28"><menu id="ysr28"></menu></sup>
  • <dl id="ysr28"></dl>
    <dl id="ysr28"><menu id="ysr28"></menu></dl>