zoukankan      html  css  js  c++  java
  • GC的设置

    堆的回顾

    串行收集器

    1、最古老,最稳定

    2、效率高

    3、停顿时间长

    4、-XX:+UseSerialGC

            新生代和老年代使用串行回收

            新生代复制算法

            老年代标记-压缩

    并行收集器

    PerNew

    1、-XX:+UserPerNewGC

           新生代 并行回收

           老年代 串行回收

    2、多线程 ,多核支持

    3、复制算法

    4、-XX:ParallelGCThreads    限制线程数量

    多线程不一定比单线程块

     Palallel收集器

     1、类似于PerNew

    2、在串行化 基础上,新生代与老年代的并行化

    3、更关注吞吐量

    -XX:+UserPalallelGC新生代并行   老年代串行

    -XX:+UserPalallelOldGC  新生代并行   老年代并行

    其他:

     -XX:MaxGCPauseMills 最大的停顿时间, 单位毫秒  ,尽力保证gc操作不会超过改时间

       -XX: GCTimeRatio    0----100范围 ,垃圾收集时间占总时间的比  默认为99,表示最大使用1%的时间去做GC

    这两个参数比较矛盾,因为停顿时间和吞吐量不能同时调优

                           

    CMS收集器(并发标记  清除)   这里的并发 是与用户线程一起执行

    1、标记  清除算法

    2、并发阶段会降低吞吐量

    3、老年代收集器 (新生代使用PerNew)

    4、停顿时间少

    5、-XX: +UseConMarkSweepGC

    着重实现了标记的过程:

    1、初试标记

          根可以直接关联到的对象

         速度块

    2、并发标记(和用户线程一起执行)

          主要过程,标记所有的对象

    3、重新标记

          由于并发标记的时候,用户线程正在执行,因此在正式清理前,再次修正

    4、并发清除

           将标记的结果,直接清除

    特点:

    1、尽可能的降低停顿

    2、影响系统的性能

    3、清理不彻底

    4、和用户线程一起执行,不能在空间快满的时候 再清理

    -XX:CMSInitiatingOccupancyFraction设置触发GC的阈值
    如果不幸内存预留空间不够,就会引起concurrent mode failure  ,之后会使用 串行收集器, 会停顿稍长时间

    其他:

    -XX:+ UseCMSCompactAtFullCollection Full GC后,进行一次整理
    整理过程是独占的,会引起停顿时间变长
    -XX:+CMSFullGCsBeforeCompaction
    设置进行几次Full GC后,进行一次碎片整理
    -XX:ParallelCMSThreads
    设定CMS的线程数量


  • 相关阅读:
    纸牌排序
    将年份转换成天干地支
    猜算式
    字符串的简单处理
    九宫格填数字
    扫雷
    嗨喽
    Input.GetAxis与Input.GetAxisRaw区别
    C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别
    开发游戏所需知识(知乎转载)
  • 原文地址:https://www.cnblogs.com/lizhiyan-world/p/7325243.html
Copyright © 2011-2022 走看看