Java中常见的垃圾回收器 Serial、Parallel、CMS、G1 和 ZGC简介

Java中有几种常见的垃圾回收器,每种垃圾回收器都有其特定的工作方式和回收策略。下面列举了常见的Java垃圾回收器,并对其进行详细说明。

  1. Serial 垃圾回收器:
  • 回收过程:单线程回收器,使用标记-清除算法。它首先暂停所有应用线程,然后标记需要回收的对象,最后清除未被标记的对象。
  • 适用代:主要用于新生代。
  1. Parallel 垃圾回收器:
  • 回收过程:多线程回收器,使用标记-清除算法。多个线程并行进行垃圾回收操作,提高回收效率。同样会暂停所有应用线程。
  • 适用代:主要用于新生代。
  1. CMS(Concurrent Mark-Sweep)垃圾回收器:
  • 回收过程:使用并发标记-清除算法,以减少停顿时间。首先进行初始标记,然后并发进行标记和清除操作,最后进行重新标记和清除操作。
  • 适用代:主要用于老年代。
  1. G1(Garbage-First)垃圾回收器:
  • 回收过程:基于分代收集的垃圾回收器,将堆内存划分为多个区域。使用并发标记-整理算法,将垃圾对象进行标记并整理内存,减少碎片。
  • 适用代:主要用于新生代和老年代。
  1. ZGC(Z Garbage Collector)垃圾回收器:
  • 回收过程:使用并发标记-整理算法,将垃圾对象进行标记并整理内存。采用读屏障技术,减少应用线程的停顿时间。
  • 适用代:主要用于大型堆内存,包括新生代和老年代。

垃圾回收的整个过程通常包括以下几个步骤:

  1. 标记(Marking)
  • 垃圾回收器从根对象开始遍历对象图,标记所有被引用的对象为存活对象。
  • 标记过程可以通过根据不同的垃圾回收算法采用不同的标记方式,如标记-清除算法、标记-复制算法、标记-整理算法等。
  1. 清除(Sweeping)
  • 垃圾回收器清除所有未被标记的对象,即将被标记为死亡(垃圾)的对象进行回收,释放它们所占用的内存空间。
  • 清除过程可以根据不同的垃圾回收算法采用不同的清除方式,如清除未被标记的对象、清除整个区域等。
  1. 压缩(Compacting)
  • 有些垃圾回收算法在清除阶段后会进行内存压缩操作,将存活对象进行整理,使它们在内存中连续排列,减少内存碎片的产生。
  • 压缩过程可以提高内存的利用率和访问效率。
  1. 内存分配(Allocation)
  • 在垃圾回收完成后,如果应用程序需要分配新的对象,垃圾回收器会为其分配内存空间。
  • 内存分配可以采用不同的策略,如指针碰撞、空闲列表等。

这些步骤中的具体实现方式和细节取决于所使用的垃圾回收算法和具体的垃圾回收器。不同的垃圾回收器可能在标记、清除和压缩等阶段采用不同的策略和技术,以满足不同的性能需求和内存管理目标。

需要注意的是,具体选择哪种垃圾回收器以及用于哪个代的决策是由JVM根据运行时参数、系统配置和应用程序行为等动态决定的。因此,在实际应用中,可以根据应用的特性和性能需求进行适当的调整和配置。

相关文章

图解Java垃圾回收机制,写得非常好

什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用...

Java的垃圾回收(Garbage Collection)机制

(原文2006年发在CSDN上,ID是beepbug。因为是发表在CSDN上,内容可能有点偏深奥。如果有不明白处,可以在评论区提出,或私信我。)一.谁在做Garbage Collection? 一种流...

JVM内存清洁工:垃圾回收算法如何让Java程序跑得更快更稳?

在Java的世界里,程序运行时的内存就像一间不断产生垃圾的房间。如果没有“清洁工”及时清理,垃圾堆积会导致房间无法容纳新物品,最终程序崩溃。而JVM的垃圾回收(GC)机制,正是这位隐形的“扫地僧”,默...

「Java入门」十五 垃圾回收机制

今天来自Java300课程的垃圾回收机制,有视频详解在这里,点击「链接」就可以看到了哦,有需要配套视频资料的小伙伴也可以点击「链接」哦。垃圾回收机制(Garbage Collection)Java引入...

Java虚拟机中的垃圾回收算法:那些让你的内存“焕然一新”的秘密

Java虚拟机中的垃圾回收算法:那些让你的内存“焕然一新”的秘密在Java的世界里,Java虚拟机(JVM)就像一个精明的管家,它不仅管理着我们的代码执行,还负责清理内存中不再需要的对象,这就是我们所...

JVM03——四种垃圾回收算法,你都了解了哪几种

在之前的文章中,已经为各位带来了JVM的内存结构与堆内存的相关介绍,今天将为为各位详解JVM垃圾回收与算法。关注我的公众号「Java面典」了解更多 Java 相关知识点。如何确定垃圾想要回收垃圾,必须...