Java虚拟机的垃圾收集器之新生代收集器

hotspot虚拟机的收集器之新生代收集器

hotspot垃圾收集器主要有七种:如图所示:

Java虚拟机的垃圾收集器之新生代收集器

图中上面部分是新生代的垃圾收集器,下面部分表示老年代的垃圾收集器,两个垃圾收集器的之间的连线表示两个收集器搭配使用。

serial收集器

serial收集器是最基本发展最悠久的收集器。serial收集器是一个单线程的收集器,但他的“单线程”的意义并不仅仅只会使用一个cpu或者一条线程去完成垃圾收集工作,更重要的是在他进行垃圾收集时,必须暂停其他所有的工作线程,直到收集结束。

Java虚拟机的垃圾收集器之新生代收集器

serial/serial Old收集器运行示意图

serial的优点:简单有效(与其他收集器的单线程比),对于限定单个cpu的环境来说,serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程的收集效率。serial收集期对于运行在client模式下的虚拟机来说是一个很好的选择。

ParNew收集器

ParNew收集器其实就是serial收集器的多线程版,除了使用对线程进行垃圾回收收集之外,其余包括serial收集器可用的所有控制参数、收集算法、stop the world、对象分配规则、回收策略等都和serial收集器完全一样。

Java虚拟机的垃圾收集器之新生代收集器

ParNew/serial Old 收集器运行示意图

ParNew收集器的优缺点:ParNew收集器在单cpu的环境中绝对不会比serial好,甚至由于存在线程交互的开销,该收集器在通过超线程技术 实现的两个cpu的环境中都不能百分之百保证超过serial收集器。当然随着cpu的数量增加,他对于GC时系统资源的利用还是很有好处的。

Parallel Scavenge收集器

Parallel Scavenge收集器也是使用复制算法的收集器
Parallel Scavenge的特点:Parallel Scavenge关注与其他收集器不同,CMS等收集器的关注点是尽可能地缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标则是达到一个可控制的吞吐量,所谓的吞吐量就是CPU用于运行用户代码的时间与CPU总耗时间的比值,即吞吐量 = 运行用户代码时间/(运行用户代码时间+垃圾收集时间)。

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

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