微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JVM九种垃圾收集器简单整理比较

  1. Serial:最早的垃圾收集器,新生代,单线程,使用标记-复制算法
  2. SerialOld :最早的垃圾收集器,老年代,单线程,使用标记-整理算法
  3. parNew : Serial的升级版,新生代,多线程,使用标记-复制算法,目前依然是不少Hot Spot虚拟机服务端的首选收集器,因为只有它能与CMS配合工作
  4. Parallel Scavenge :新生代,标记-复制算法,多线程,被称为“吞吐量优先收集器”(吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 运行垃圾手机时间)),可以根据系统运行情况自适应调节Eden区和Survivor区的大小比例。
  5. Parallel Old :老年代,标记-整理算法,多线程,与Parallel Scavenge配合使用,适用于注重吞吐量或处理器资源较为稀缺的场合。
  6. CMS:以获取最短停顿时间为目标,老年代,基于标记-清除算法,有四个阶段:初始标记(STW,耗时最短),并发标记(并发,耗时较长),重新标记(STW,耗时略短),并发清除(并发耗时较长)。缺点:对处理器资源敏感,产生浮动垃圾,空间碎片。
  7. G1:全堆。将堆划分为多个大小固定的独立区域(region),并跟踪这些区域的垃圾堆积程度,在后台维护一个优先级列表,每次根据允许的收集时间,优先回收垃圾最多的区域(Garbage First)。有一类“大对象堆”,保存大小超过rigion一半的大对象。整体上基于“标记-整理”,局部又是基于“标记-复制”,不产生内存碎片,停顿时间可控,但内存消耗较大。
  8. Shenandoah:仅在OpenJDK中支持,使用连接矩阵代替了G1的记忆集。
  9. ZGC:以低延迟为首要目标的一款垃圾收集器。它是基于动态Region内存布局,(暂时)不设年龄分代,使用了读屏障、染色指针和内存多重映射等技术来实现可并发的标记-整理算法的收集器。在JDK 11新加入,还在实验阶段,主要特点是:回收TB级内存(最大4T),停顿时间不超过10ms。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐