加入收藏 | 设为首页 | 会员中心 | 我要投稿 惠州站长网 (https://www.0752zz.com.cn/)- 办公协同、云通信、物联设备、操作系统、高性能计算!
当前位置: 首页 > 编程 > 正文

垃圾回收器你知道有哪些吗?

发布时间:2021-03-28 14:56:06 所属栏目:编程 来源:互联网
导读:作为一个 Java 开发,在面试的过程中垃圾回收器是经常会被问到的一个问题,随着 Java 的发展,垃圾回收器也经历了很多的发展。大家熟知的垃圾回收器主要有下面几种。 Serial 单线程新生代复制算法的垃圾回收器; SerialOld 垃圾回收器,是一种单线程老年代标

作为一个 Java 开发,在面试的过程中垃圾回收器是经常会被问到的一个问题,随着 Java 的发展,垃圾回收器也经历了很多的发展。大家熟知的垃圾回收器主要有下面几种。

  1. Serial 单线程新生代复制算法的垃圾回收器;
  2. SerialOld 垃圾回收器,是一种单线程老年代标记整理算法;
  3. ParNew 垃圾回收器,是 Serial 的多线程实现,采用复制算法实现;
  4. Parallel Scavenge 垃圾回收器,是一种高效的多线程复制算法;
  5. ParallelOld 垃圾回收器,是 Parallel Scavenge 的一种老年代的多线程标记整理算法;
  6. CMS 垃圾回收器,是一种多线程标记清除算法,后面会详细介绍;
  7. G1 垃圾回收器,是一种高吞吐量的垃圾回收器。




整个效率还是偏低的。

分代回收算法

分代回收算法是目前使用较多的一种算法,这个不是一个新的算法,只是将内存进行的划分,不同区域的内存使用不同的算法。根据对象的存活时间将内存的划分为新生代和老年代,其中新生代包含 Eden 区和 S0,S1。在新生代中使用是复制算法,在进行对象内存分配的时候只会使用 Eden 和 S0 区,当发生 GC 的时候,会将存活的对象复制到 S1 区,然后循环往复进行复制。当某个对象在进行了 15 次GC 后依旧存活,那这个对象就会进入老年代。老年代因为每次回收的对象都会比较少,因此使用的是标记整理算法。

垃圾回收器

上面虽然提到了好几个垃圾回收器,但是目前主流的垃圾回收器只有 CMS 和 G1。下面就跟大家聊下这两个垃圾回收器。

CMS 垃圾回收器

CMS 全称 Concurrent Mark Sweep 并发标记清除垃圾回收器。CMS 是一种以获取最短停顿时间为目的的垃圾回收器。提到停顿时间,我们都知道任何垃圾回收器在进行工作的时候都会出现 STW,Stop the World 停止用户进程,这对业务来说只很难接受的,但是现在市面上所有的垃圾回收器都无法避免这个问题,只能最大化的去优化,从而降低停顿的时间。

CMS 虽然被称为是并发的垃圾回收器,但是也并不是完全并发的,从名字上我们可以看到是采用标记-清除算法来实现的,整个实现过程分为五个步骤:

  1. 初始标记:暂停所有线程,从来可达性分析来标记对象,这也是 CMS 垃圾回收器第一个 STW 的时候;
  2. 并发标记:并发标记的时候 GC 线程和用户线程是同时存在的,这个过程中会记录所有可达的对象,但是这个过程结束过后由于用户线程一直在运行所以还会产生新的引用更新,也就是需要下一步了;

(编辑:惠州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读