堆的回顾
三种收集器
1 串行收集器
最古老,最稳定,效率高
缺点:可能产生较长的停顿
-XX:+UseSerialGC
-------新生代,老年代使用串行回收
-------新生代标记-压缩(因为新生代对象多)
-------老年代复制(老年代对象少)
2 并行收集器
注意:并行不一定快!
(1) ParNew
--- -XX:+UseParNewGC
----------新生代并行
----------老年代串行
新生代老年代都使用复制算法,需要多核支持
---------新生代复制算法
---------老年代 标记-压缩算法
-XX:+UseParallelGC
使用parallel收集器,老年代串行
-XX:+UseParallelOldGC
使用parallel收集器+并行老年代
-XX;MaxGCPauseMils
设置最大停顿时间,单位毫秒
-XX:GCTimeRatio
0-100取值范围,设置收集时间占总时间的比,默认是99,表示最大允许1%的时间做GC
注意:最后两个参数是矛盾的,因为停顿时间和吞吐量不能同时调优
3 CMS(concurrent mark sweep)收集器
-----与用户线程一起执行
-----使用标记-清除算法
-----老年代收集器(新生代使用ParNew)
----- -XX:+UseConMarkSweepGC
CMS运行过程
(1)----初始标记 标记跟直接关联的对象
(2)----并发标记(和用户线程一起)主要标记过程,标记所以对象
(3)----重新标记 由于第二步与用户线程一起运行,用此做修正
(4)----并发清理 (和用户线程一起) 清理对象,可能导致清理不干净,因为此时用户线程还在运行
所以 CMS收集器使用串行收集器作为后备