JVM垃圾收集器(二) —— 新生代垃圾收集器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Lin_wj1995/article/details/79976231

在看本文之前,建议先去了解一下几个概念先再来看下文哈,大牛请忽略,哈哈~

所有收集器概括图

下面先给大家看一下所有收集器及其关联的示意图,然后我们再对每个回收器进行讲解:
这里写图片描述
★★★ 注意:如果两个收集器之间存在连线,就说明它们可以搭配使用


Serial收集器

1、特点:一个单线程的收集器;且运行时必须暂停其他所有的工作线程,直到它收集结束

2、虚拟机运行在Client模式下的默认新生代收集器

3、优点:简单而高效(与其他收集器的单线程比),对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集效率。

4、缺点:需要停止用户线程,也就是传说中的 “Stop The World”

5、Serial / Serial Old 收集器运行示意图:
这里写图片描述
注:上面的 “/” 表示的是新生代和老年代分别采用的是什么收集器哈,下面的图也是一样,Serial Old下面会讲,这里注意一下哈~


ParNew收集器

1、特点:ParNew收集器其实就是Serial收集器的多线程版本,只能在新生代中用~

2、优缺点:和Serial收集器时一样的~

3、许多运行在Server模式下的虚拟机中首选的新生代收集器

4、注意的点:该收集器默认的并行度和CPU数量相同

5、ParNew / Serial Old收集器运行示意图:
这里写图片描述


Parallel Scavenge收集器

1、特点:和ParNew收集器一样,该收集器是在新生代的,也是并行的,也是采用 复制算法

2、和ParNew收集器的区别:Parallel Scavenge收集器的目标则是达到一个可控制的吞吐量(Throughput)。
所谓吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)。
假如虚拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。

3、说明:停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户体验
高吞吐量则可以高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。


本文的内容和图片参考自:《深入理解Java虚拟机:JVM高级特性与最佳实践》

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页