JVM垃圾收集器简述

补充几个概念:
stop the world 指该收集器执行时,将阻塞一切线程
parallel 并行,可以多线程执行
concurrent并发,用户进程可以与垃圾回收同时执行


下面介绍新生代收集器

serial收集器

顾名思义,串行收集器,在该收集器工作时,将stop the world。
优点:简单高效(相对于其他单线程收集器)
缺点:stop the world ,单线程。

parNew收集器

实际上是serial的多线程版本,很多参数与serial相同。
但是: 它是目前唯一能与CMS搭配的新生代收集器
优点:多线程,能与CMS搭配
缺点:依旧stop the world

parallel scavenge收集器

看上去参数与parNew相同,都是多线程,都是新生代,都是使用复制算法。但是,它的侧重点与ParNew不同,它注重的是 CPU利用率与最大吞吐量
吞吐量=用户代码执行时间/(用户代码执行时间+垃圾收集时间)
优点:对于注重高CPU利用率与吞吐量的服务器来说,它与Parallel Old相搭配是非常完美的。
缺点:大致同上


下面介绍老年代收集器

serial old收集器

serial收集器的老年代版本,现在的作用一般是:JDK1.5之前与parallel scavenge搭配使用。二是作为CMS触发“concurrent mod fail”时的后备方案

parallel old收集器

作为与 parallel scavenge搭配使用,同样注重高CPU利用率与吞吐量。

CMS收集器

注意,它使用的是标记-清除算法
可以称得上是里程碑式的收集器,它做到了真正的并发收集垃圾
大致流程是:
初始标记——标记GCRoots
并发标记——标记不可达对象
重新标记——解决由于在并发阶段可能出现的标记错误
并发收集——并发垃圾回收

优点:并发!!
缺点:
对CPU资源敏感,当只有少于4个CPU时,即使并发清除阶段,也会让用户觉得系统变“慢”
不能处理浮动垃圾(在并发清除阶段,用户进程产生的未标记的垃圾),当清除阶段剩余的空间仍然不能满足系统所需时,就会触发“concurrent mode fail”,从而 stop the world ,由serial old 来接替清理垃圾的重担。
空间碎片问题(因为它是基于标记-清除算法)

G1收集器

又一个里程碑。同样并发,但是整体来说基于标记-整理算法。且提供了一个可预测的停顿时间(这里的实现主要是通过虚拟机对与每个要回收的垃圾,建立一个回收价值的优先队列。这也是Garbage first的来源)。
清除流程大致类似CMS。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zwzsdy/article/details/79955248
文章标签: JVM 垃圾收集器
个人分类: jvm知识学习
想对作者说点什么? 我来说一句

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

关闭
关闭
关闭