zoukankan      html  css  js  c++  java
  • JDK7新特性之G1 GC

    Garbage-first garbage collector,简称G1 GC,是最终将用于代替Concurrent Mark-Sweep garbage collector(CMS GC)的新一代垃圾回收器。原本的计划是作为JDK7新特性的一部分发布,但其后JDK7一直在坚持不懈的跳票,G1也无法再等下去了。目前JDK1.6update14及以后版本的jvm中已经继承了G1 GC,可以使用参数-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC来启用。

    G1是一个适用于服务器端、大内存、多CPU情景的垃圾收集器,主要目标是在维持高效率回收(high thoughput)的同时,提供软实时中断特性。用户可以指定一个时间上限,如果垃圾回收导致的程序暂停超过了用户设定的时间上限,会打断垃圾回收,恢复程序的执行。

    G1的原理在于将堆划分成等一系列大小的区域,每一个区域都有一个对应的remembered set结构,用来记录指向这个区域中的地址的其他区域的指针。 在垃圾回收时,选择记录最少的一个区域进行,按找这种方式选择出来的区域,通常是有用数据最少、垃圾最多的区域,这也就是“Garbage-first ”名称的由来。假如没有外部的指针指向这个区域,就可以直接回收整块区域而不用进行内存Copy,这种情况真是太好了。

    以区域为单位的回收,时间粒度更小,这也是实现垃圾回收软实时中断的基础。

    G1付出的代价之一是额外的空间占用(用于remembered set)。

    附送SUN公司的一篇论文,供想了解更多细节的人观览。
     

    因为G1 GC还不是默认的jvm gc策略(目前为止),需要使用的话可以加入以下参数开启:

    -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC        #开启
    -XX:MaxGCPauseMillis =50                  #暂停时间目标
    -XX:GCPauseIntervalMillis =200          #暂停间隔目标
    -XX:+G1YoungGenSize=512m            #年轻代大小
    -XX:SurvivorRatio=6                            #幸存区比例
    #据称下面两个参数可能会引发race condition,慎用。
    -XX:+G1ParallelRSetUpdatingEnabled
    -XX:+G1ParallelRSetScanningEnabled

  • 相关阅读:
    Socket 编程(二)
    【ASP.NET】:Ckeditor+Fckeditor的使用
    Socket编程(一):建立与客户端的连接并接受数据
    Linux基础系列:常用命令(3)
    linux 命令汇总
    Linux基础系列:常用命令(2)
    Linux基础系列:常用命令(1)
    计算机基础系列三:网络基础
    计算机基础系列二:计算机操作系统
    计算机基础系列一:计算机硬件
  • 原文地址:https://www.cnblogs.com/daichangya/p/12958905.html
Copyright © 2011-2022 走看看