Serial收集器(串行收集器)
最古老的收集器
只使用一个线程进行回收,会产生较长时间的停顿(STW)
新生代和老年代使用串行回收;
新生代复制算法,老年代标记-压缩算法。
垃圾回收过程产生STW
-XX:+UseSerialGC 使用串行收集器
ParNew收集器(并行收集器)
Serial收集器的多线程版本
新生代并行,老年代串行回收。
新生代复制算法,老年代标记-压缩算法。
-XX:+UseParNewGC ParNew收集器
-XX😛arallelGCThreads 限制线程数量
Parallel收集器
类似ParNew收集器。
更关注系统的吞吐量。
可通过参数来打开自适应调节策略,虚拟机根据当前系统的运行情况收集性能监控信息,动态调整这个参数信息以提供最合适的停顿时间或者最大的吞吐量。
也可以通过参数控制GC的停顿时间不超过多少毫秒或者比例。
新生代复制,老年代标记-压缩。
老年代串行
-XX:+UseParallelGC 使用Parallel收集器
-XX:GCTimeRatio JVM吞吐量要达到的目标值。
更准确地说,-XX:GCTimeRatio=N指定目标应用程序线程的执行时间(与总的程序执行时间)达到N/(N+1)的目标比值。 例如,通过-XX:GCTimeRatio=9我们要求应用程序线程在整个执行时间中至少9/10是活动的(因此,GC线程占用其余1/10)。 基于运行时的测量,JVM将会尝试修改堆和GC设置以期达到目标吞吐量。 -XX:GCTimeRatio的默认值是99,也就是说,应用程序线程应该运行至少99%的总执行时间。
-XX:MaxGCPauseMillis JVM最大暂停时间的目标值(毫秒)
ParallelOld收集器
Parallel收集器的老年代版本。
使用多线程和标记-压缩算法。
老年代并行。
-XX:+UseParallelOldGC 使用Parallel收集器
CMS收集器
以获取最短回收停顿时间为目标的收集器。
基于标记-清除算法。
初始标记(STW)仅是标记GCRoot能直接关联到的对象,速度很快。
并发标记
重新标记(STW)修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短
并发清除
老年代收集器 ,新生代使用ParNew
并发标记和并发清除耗时最长。
优点:并发收集,低停顿
缺点:产生大量内存碎片,并发阶段吞吐量降低。
-XX:+UseConcMarkSweepGC 使用CMS收集器
-XX:+
UseCMSCompactAtFullCollection Full GC后,进行一次碎片整理;整理过程是独占的,会引起停顿时间变长
-XX:+
CMSFullGCsBeforeCompaction 设置进行几次Full GC后,进行一次碎片整理
-XX😛arallelCMSThreads 设定CMS的线程数量(一般情况约等于可用CPU数量)
G1收集器
目前最先进的一种收集器。(暂时未整理具体的实现机制,后面整理)
声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!