JVM学习笔记——常见的垃圾收集器

在这里插入图片描述
上图为虚拟机包含的所有垃圾收集器。

新生代:新生代采用的是“复制算法”
  • Serial:单线程,新生代
    • 串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收
    • 新生代、老年代使用串行回收
    • 新生代复制算法
    • 老年代标记-压缩
    • -XX:+UseSerialGC
  • ParNew: 多线程,新生代
    • Serial收集器新生代的并行版本,在新生代回收时使用复制算法,多线程,需要多核支持
    • -XX:+UseParNewGC(new代表新生代,所以适用于新生代)
    • -XX:ParallelGCThreads 限制线程数量
  • Parallel Scavenge:多线程,新生代,关注吞吐量,允许较长的STW(Stop the world)换取吞吐量最大化
    • 类似ParNew ,新生代复制算法,老年代标记-压缩,更加关注吞吐量
    • -XX:+UseParallelGC 使用Parallel收集器+ 老年代串行
    • -XX:+UseParallelOldGC 使用Parallel收集器+ 老年代并行
老年代:老年代采用的是“标记-清除-整理”算法
  • Serial Old: 单线程,Serial的老年代版本
  • Parallel Old:多线程,Parallel Scavenge的老年代版本,关注吞吐量
  • CMS:多线程,标记-清除算法,关注停顿时间,可以与Serial和ParNew配合。
其它:
  • G1:同时负责新生代和老年代,是目前一段时间主流的垃圾收集器(JDK 9 到 11 的默认垃圾收集器)。
  • ZGC:在大堆下也可以控制STW时间极短(几毫秒内),在JDK 11 为实验阶段。
Java 各版本模式默认是用的什么垃圾收集器?
  • 在JDK7,默认是Parallel Scavenge + Serial Old。
  • 在JDK 8 及JDK 7u4之后的版本,默认是Parallel Scavenge + Parallel Old。
  • 在JDK 9 到JDK 11,默认是G1
垃圾收集器参数总结

在这里插入图片描述

备注

串行收集器(Serial Collector)
并行收集器(Parallel Collector)
并发标记清除收集器(Concurrent Mark Sweep Collector,CMS

发布了142 篇原创文章 · 获赞 89 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/wangchengming1/article/details/103477828
今日推荐