学习jVM之垃圾回收器学习总结

来源:互联网 发布:广电网络的营业员 编辑:程序博客网 时间:2024/06/03 20:29

1、Serial收集器(串行收集器,属于新生代收集器,是Client模式下的默认收集器)

    单线程收集器,运行的时候,用户线程会停止

2、ParNew收集器(并行收集器,属于新生代收集器,是server模式下下的首选收集器)

    多线程收集器,运行的时候,用户线程会停止

    -XX:+UseConcMarkSweepGC选项后的默认新生代收集器  -XX:+UseParNewGC选项强制使用

    -XX:ParalleGCThreads设置线程数,默认情况如下,当CPU数少于8个的时候,那么就等于CPU数;当CPU数大于8个的时候,等于(3+(5*CPU_count/8))

3、Paralle Scavenge(并行收集器,属于新生代收集器,也叫吞吐量优先收集器)

     侧重于吞吐量的控制 ,它有三个重要的参数配置
    1、-XX:MaxGCPauseMills:用于控制最大垃圾收集停顿时间(牺牲了吞吐量和新生代空间),虚拟机会尽量将垃圾回收时间控制在这个范围内
    2、-XX:GCTimeRatio:用户设置吞吐量大小 比如19 ,那么垃圾回收时间就是(1/(19+1))=5%
    3、-XX:+UseAdaptiveSizePolicy 使虚拟机动态调整相关参数,比如-Xmn,-XX:SurvivorRatio、-XX:PretenureSizeThreshold等。我们只需要配置好堆大小等大盘为的参数
     -XX:ParalleGCThreads设置线程数,默认情况如下,当CPU数少于8个的时候,那么就等于CPU数;当CPU数大于8个的时候,等于(3+(5*CPU_count/8))

4、Serial Old收集器(串行收集器,属于老年代收集器)

    单线程收集器,运行的时候,用户线程会停止。可作为CMS收集器失败后的后备与预案

5、Paralle Old(并行收集器,属于老年代收集器)

    多线程收集器,运行的时候,用户线程会停止,与Paralle Scavenge一起使用

6、CMS收集器(并发收集器,属于老年代收集器)

    多线程收集器,运行的时候,用户线程会同时运行(可能跟用户线程并发运行,也可能跟用户线程交替运行),清理过程有4个步骤

        1、初始化标记 (用户线程需要停止)
        2、并发标记 (用户线程不停止)
        3、重复标记 (用户线程需要停止)

        4、并发清除(标记----清除算法,会有空间碎片)

    它有三个重要参数

        1、-XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发,默认为68%
        2、-XX:+UseCMSCompactAtFullCollection :设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理
        3、-XX:CMSFullFCsBeforeCompaction:设定进行多少次CMS来及回收后,进行一次内存压缩

    其它参数:

        -XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发,默认为68%
        -XX:+UseCMSCompactAtFullCollection :设置CMS收集器在完成垃圾收集后是否要进行一次内存碎片的整理
        -XX:CMSFullFCsBeforeCompaction:设定进行多少次CMS来及回收后,进行一次内存压缩
        -XX:ParallelCMSThreads 设置CMS的线程数,默认为(CPU_count+3)/4
        -XX:+CMSClassUnloadingEnabled:允许对类元数据继续回收
        -XX:+CMSParallelRemarkEnabled:启动并行重标记
       -XX:CMSInitiatingPermOccupancyFraction:当永久区占用率达到这一百分比的时候,启动CMS回收(前提是-XX:+CMSClassUnloadingEnabled是激活的)
       -XX:UseCMSInitiatingPermOccupancyOnly:表示只在达到阈值的时候,才进行CMS回收
      -XX:UseCMSIncrementalMode:使用增量模式,比较适合单CPU

      -XX:HandlePromotionFailure:是否允许分配失败担保

7、G1收集器(暂不介绍)

8、Minor GC触发条件

    对象优先分配给Eden中,如果Eden满了就进行一个Minor GC。


9、对象进入老年代的触发条件
    1、大对象直接进入老年代,凡是对象大小大于PretenureSizeThreshold设置的值,直接进入老年代
    2、当新生代的中的对象年龄大于MaxTenuringThreshold设置的值,会进入老年代

    3、当Survivor中相同年龄的所有对象大小的综合大于Survivor空间的一半时,年龄大于等于该年龄的对象会进入老年代

10、触发Full GC的条件

    1、当老年代空间不足或者到达设置触发Full GC的标准时

    2、在发生Minor GC时,虚拟机会检测之前每次晋升到老年代的平均大小是否大于老年代的剩余空间大小,如果大于,则改为直接继续一次Full GC。如果小于,则查看HandlePromotionFailure设置是否允许担保失败,如果允许,那只会进行Minor GC;如果不允许,则也要改为进行一次Full GC


0 0
原创粉丝点击