深入理解Java虚拟机(三)

 2019-12-22 11:25  阅读(1224)
文章分类:JVM
1.垃圾收集器

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

2019120001703\_1.png

虚拟机Client模式和Server模式

ParNew收集器,是Serial的多线程版本,是许多运行在Server模式下的虚拟机中首选的新生代收集器,除了Serial收集器外目前只有它能与CMS收集器配合工作。

2019120001703\_2.png

2019120001703\_3.png

Parallel Scavenge收集器,是一个新生代收集器,复制算法,多线程并行。

目的是达到一个可控制的吞吐量,吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)

2019120001703\_4.png

自适应调节策略也是Parallel Scavenge收集器与ParNew收集器的一个重要区别。

2019120001703\_5.png

2019120001703\_6.png

2019120001703\_7.png

Serial Old收集器,是Serial收集器的老年代版本,单线程收集器,使用“标记-整理”算法。主要意义也是在与给Client模式下 的虚拟机使用,如果在Server模式下,它的两大用途:一是在JDK1.5以及之前版本中与Parallel Scavenge收集器搭配使用,另一个是作为CMS收集器的后背预案。

2019120001703\_8.png

Parallel Old收集器,是Parallel Scavenge收集器的老年代版本,多线程,“标记-整理”算法,在JDK1.6中才开始提供的。在注重吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel Old收集器。

2019120001703\_9.png

CMS收集器,是一种以获取回收停顿时间为目标的收集器。目前很大一部分的Java应用集中在互联网站或者B/S系统的服务器端上,这类应用尤其重视服务器的响应速度,希望系统停顿的时间最短,以给用户带来较好的体验。CMS收集器就非常符合这类应用的需求。名字”Mark Sweep“上就看出是基于”标记-清除“的算法实现的。

运作过程分为4个步骤,包括:初始标记、并发标记、重新标记、并发清除。

2019120001703\_10.png

2019120001703\_11.png

2019120001703\_12.png

优点是并发收集,低停顿。

缺点:1.对CPU资源非常敏感,在并发阶段,它虽然不会导致用户线程停顿,但是会因为占用了一部分线程(或者说CPU资源)而导致应用程序变慢,总吞吐量会降低。

2.无法处理浮动垃圾。

2019120001703\_13.png

2019120001703\_14.png

3.“标记-清除”算法会产生大量的空间碎片。

2019120001703\_15.png

G1收集器,是一款面向服务端应用的垃圾收集器,Hotspot开发团队赋予它的使命是未来可替换掉JDK1.5中发部的CMS收集器。

特点:

2019120001703\_16.png

2019120001703\_17.png

2019120001703\_18.png

2019120001703\_19.png

2019120001703\_20.png

2019120001703\_21.png

2019120001703\_22.png

2019120001703\_23.png2019120001703\_24.png

点赞(1)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> 深入理解Java虚拟机(三)

相关推荐