Java 虚拟机中有多种垃圾收集器,它们主要负责对堆内存中的对象进行垃圾回收。不同的垃圾收集器有不同的算法和特性,以适应不同的应用场景和性能需求。以下是一些常见的垃圾收集器:
-
Serial收集器(Serial Garbage Collector):
- 使用单线程进行垃圾收集,适用于小型应用或者对吞吐量要求不高的场景。主要用于新生代的收集,采用复制算法。
-
Parallel收集器(Parallel Garbage Collector):
- 也被称为吞吐量优先收集器,使用多线程进行垃圾收集。适用于多核处理器,主要用于新生代的收集,同样采用复制算法。
-
ParNew收集器(Parallel New Garbage Collector):
- 是 Parallel 收集器的改进版,主要针对新生代的收集,并使用多线程。与 Parallel 收集器的不同之处在于 ParNew 使用 CMS(Concurrent Mark-Sweep)作为老年代的收集器。
-
CMS收集器(Concurrent Mark-Sweep Garbage Collector):
- 以减少应用程序停顿时间为目标,主要用于老年代的收集。CMS 在标记和清理阶段尽量减少停顿时间,但可能会牺牲一些吞吐量。
-
G1收集器(Garbage-First Garbage Collector):
- 以取得更短的停顿时间为目标,适用于大堆内存的场景。G1 采用分代收集,但不同于传统的分代收集器,它将整个堆空间划分为多个大小不同的区域。
-
Z Garbage Collector(ZGC):
- 是一种面向大堆和低延迟的垃圾收集器,适用于需要更短 GC 停顿时间的场景。ZGC 使用了一种称为 Colored Pointers 的技术来避免全局的垃圾收集停顿。
-
Shenandoah Garbage Collector:
- 是一种低停顿时间的垃圾收集器,适用于需要快速响应的大型应用。它采用了全局并发标记和清理的方式来减少停顿时间。
这些垃圾收集器具有不同的特性和适用场景,开发人员可以根据应用程序的性质和性能需求选择适当的垃圾收集器。在 JDK 9 之后,G1 收集器成为默认的垃圾收集器。
Was this helpful?
0 / 0