美文网首页
JVM垃圾收集器

JVM垃圾收集器

作者: packet | 来源:发表于2018-07-20 19:44 被阅读0次

垃圾收集器的理论依据是垃圾回收算法,这里是指堆内存的垃圾收集器。

垃圾收集器的两大指标:

GC时间:GC时会暂停其他工作线程(Stop the World),越短越好。

吞吐量: 用户代码时间为x,垃圾收回时间为y,那么吞吐量为 x / ( x + y )

一、新生代垃圾收集器

1、串行收集器

复制算法,单线程,独占式。

2、并行收集器

复制算法,多线程,独占式。

3、Parallel Scavenge收集器

复制算法,多线程,独占式,以吞吐量优先。

二、老年代收集器

1、串行收集器(串行收集器的老年代版本)

MC算法,单线程,独占式。

2、并行收集器(串行收集器的多线程版本)

MC算法,多线程,独占式。

3、CMS(Concurrent Mark Sweep)

MS算法,多线程,追求GC时间最短。

其步骤如下(将Mark拆分为三个阶段):

1)初始标记(停顿):仅仅标记GC Root能标记到的对象。

2)并发标记(并发):GC Roots Tracing的过程。

3)重新标记(停顿):标记并发标记时的产生的垃圾。

4)并发清除(并发):可能产生浮动垃圾。

其中1,3两个步骤仍会Stop the World,但时间很短。缺点如下:

1)并发程序对CPU敏感,收集器的线程数量需要调试。

2)无法处理浮动垃圾。

3)会带来内存碎片问题。一个优化手段是,设置虚拟机参数,在进行N次GC之后,来一次带压缩整理的回收。

三、实战

我经历的两个项目所使用的收集器都是: 并发收集器 + CMS收集器。

遇到的OutOfMemoryError分为以下几种情况

1)堆空间太小

2)方法区太小(规则文件中的规则太多)

3)OS对内存数量限制过小。导致OutOfMemoryError:unable to create new native thread,如下图所示:


可以通过ulimit -a 设置线程数量。

2017-12-29阅:

一个系统或者工具,我们必须思考两个核心问题:技术指标是什么?优点和缺点是什么?这就好比箭靶,所有的努力都是为了命中靶心。

细节可以忘记,但思维不能丢失。以这种思维来看,CMS垃圾收集器的两大技术指标是:GC时间短和吞吐量大。优点和缺点也很明显。

值得一提的是,CMS可谓是并发版本的MS算法,设计精华是将M分解成了3个阶段,尽可能地减小了GC时间。看看,分而治之算法可谓无处不在。

相关文章

  • G1收集器详解

    详解 JVM Garbage First(G1) 垃圾收集器 G1垃圾收集器入门

  • 2020互联网Java后端面试专题解析—JVM21题

    前言 文章对 JVM 内存区域分布、JVM 内存溢出分析、JVM 垃圾回收算法/垃圾收集器、JVM 性能调优工具及...

  • 5种JVM垃圾收集器特点和8种JVM内存溢出原因

    先来看看5种JVM垃圾收集器特点 一、常见垃圾收集器 现在常见的垃圾收集器有如下几种: 新生代收集器: Seria...

  • Jvm之CMS垃圾收集器

      这篇文章主要介绍JVM的CMS垃圾收集器,以及JVM提供的垃圾收集算法。 一、垃圾收集算法   JVM提供的三...

  • GC - 收集器

    概述 垃圾收集器是垃圾回收算法的具体实现,不同商家、不同版本的 JVM 所提供的垃圾收集器可能会有差别 收集器组合...

  • JVM源码分析系列

    JVM G1算法系列 G1垃圾收集器介绍 G1垃圾收集器之RSet G1垃圾收集器之SATB G1垃圾收集器之对象...

  • JVM垃圾回收

    JVM垃圾收集器 一、垃圾收集器的分类 1.1 Serial GC 出现的最早,比较古老,最大的特点就是垃圾收集策...

  • JVM

    JVM(1):Java 类的加载机制 JVM(2):JVM内存结构 JVM(3):Java GC算法 垃圾收集器 ...

  • JVM垃圾收集器总结

    通过上篇JVM垃圾回收算法和垃圾收集器我们对JVM的七大垃圾收集器的运行原理有了大致的了解,我们来总结一下他们之间...

  • 深入学习JVM(三) -- JVM垃圾收集-G1

    G1 (Garbage First)垃圾收集器 因为上一篇文章JVM垃圾收集器总结[https://juejin....

网友评论

      本文标题:JVM垃圾收集器

      本文链接:https://www.haomeiwen.com/subject/ftoqmftx.html