JVM垃圾收集器与内存分配策略(2)

目前新生代垃圾收集器有Serial,ParNew,Parallel Scavenge; 老年代收集器有CMS,Serial Old,Parallel Old;G1这款垃圾收集器既能用于新生代又能用于老年代。

1,Serial收集器:

描述:    单线程收集器;他进行垃圾收集时,必须暂停所有的工作线程, 直到它收集结束;新生代采取复制算法暂停所有用户线程, 老年代采取标记-整理算法暂停所有用户线程。

现状:    目前为止, 依然是虚拟机运行在Client模式下的默认新生代收集器。收集几十兆甚至一两百兆的新生代, 停顿时间完全可以控制在几十毫秒最多一百毫秒以内。

2,ParNew收集器:

描述:    其实就是Serial的多线程版本;使用多线程进行垃圾收集;新生代采取复制算法暂停所有用户线程,老年代采用标记-整理算法暂停所有用户线程。

现状:    许多运行在Server模式下的虚拟机默认的新生代收集器;一个与性能无关的原因是:除了Serial收集器外, 目前只有它能与CMS收集器配合使用。

注:

ParNew收集器是使用-XX:+UseConcMarkSweepGC选项后的默认新生代收集器; 也可以使用-XX:UseParNewGC指定它

可以使用-XX:+ParallelGCThreads参数限制垃圾收集的线程数

3,Parallel Scavenge收集器:

描述:    Parallel Scavenge收集器的目标是达到一个可控制的吞吐量。所谓吞吐量就是cpu用于运行用户代码的时间与CPU总消耗时间的比值, 即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)

参数:    最大垃圾收集停顿时间设置:-XX:MaxGCPauseMillis, 设置值是一个大于0的毫秒数, 收集器将尽可能地保证内存回收花费的时间不超过设定值。

GC停顿时间的缩短是以牺牲吞吐量和新生代空间来换取的,可能会把新生代调小一些, 以使在规定的时间内可以完成垃圾回收; 也可能为了减小停顿时间而增大GC频率。

-XX:+GCTimeRatio:设置一个大于0且小于100的整数值, 也就是垃圾收集时间占总时间的比率,如果设置成x, GC时间的占比就是 1/(1+x)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f69341f4702a42ee614df0d8f973eea9.html