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的线程数量


原文地址:https://www.cnblogs.com/lizhiyan-world/p/7325243.html