知道有哪些垃圾收集器吗?

主要垃圾收集器如下,图中标出了它们的工作区域、垃圾收集算法,以及配合关系。

这些收集器中,面试的重点是两个——CMSG1

  • CMS收集器

CMS收集器是一款历史悠久且重要的收集器。

如同它的名字(并发标记清除),它是一个并发的垃圾收集器,使用多个线程进行垃圾收集。并且在垃圾收集期间,尽可能减少对应用程序的停顿时间,而不是完全停止应用程序的执行——这就是所谓的“Stop The World”。

CMS/Serial Old收集器的运行过程如图:

  • G1收集器

G1收集器是一款全新的垃圾收集器,旨在取代CMS收集器。

G1收集器使用了分代收集和区域化管理的方式,将堆内存划分为多个相等大小的区域。它使用增量式的标记-整理算法,在每次垃圾收集时,只处理一部分区域,以减少停顿时间。G1收集器还具备智能化的垃圾收集策略,可以根据应用程序的运行情况动态调整垃圾收集的目标和优先级。

  • Parallel Scavenge

Parallel Scavenge收集器是一款新生代收集器,基于标记-复制算法实现,并且能够并行收集。和ParNew有些类似,但Parallel Scavenge主要关注的是垃圾收集的吞吐量——吞吐量是CPU用于运行用户代码的时间与总消耗时间的比值,比值越大,说明垃圾收集的占比越小。

jvm-31.png

  • Serial Old

Serial Old 是 Serial 收集器的老年代版本,它同样是一个单线程收集器,使用标记-整理算法。

  • Parallel Old

Parallel Old 是 Parallel Scavenge 收集器的老年代版本,支持多线程并发收集,基于标记-整理算法实现。

  • CMS 收集器

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,同样是老年代的收集器,采用标记-清除算法。

  • Garbage First 收集器

Garbage First(简称 G1)收集器是垃圾收集器的一个颠覆性的产物,它开创了局部收集的设计思路和基于 Region 的内存布局形式。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题