堆的回顾
串行收集器
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的线程数量