当前位置: 面试刷题>> Java 中常见的垃圾收集器有哪些?
在Java生态系统中,垃圾收集(Garbage Collection, GC)是自动管理内存的关键机制,它极大地简化了程序员的内存管理工作。作为一位高级程序员,了解并掌握Java中常见的垃圾收集器是非常重要的,这不仅有助于提升应用性能,还能在遇到内存相关问题时迅速定位并解决。以下是一些Java中常见的垃圾收集器及其特点,同时我会尝试以一种贴近实战的方式介绍它们。
### 1. Serial GC(串行垃圾收集器)
Serial GC是Java虚拟机(JVM)中最基本、历史最悠久的垃圾收集器。它使用单线程进行垃圾回收,适合单核处理器或小型应用。在垃圾回收期间,会暂停所有用户线程(Stop-The-World事件),直到垃圾回收完成。尽管性能上有所牺牲,但因其简单性,在某些场景下仍被使用。
**配置示例**(在JVM启动参数中设置):
```bash
-XX:+UseSerialGC
```
### 2. Parallel GC(并行垃圾收集器)
Parallel GC是Serial GC的多线程版本,适用于多核处理器环境。它同样会暂停所有用户线程进行垃圾回收,但利用多个线程并行执行,显著提高了垃圾收集的效率。适合中到大型的多核服务器环境。
**配置示例**:
```bash
-XX:+UseParallelGC
-XX:ParallelGCThreads= # 指定并行GC的线程数
```
### 3. CMS GC(Concurrent Mark Sweep,并发标记清除)
CMS GC旨在最小化垃圾回收时的停顿时间。它分为几个阶段进行:初始标记(Stop-The-World)、并发标记、重新标记(Stop-The-World)、并发清除。尽管在并发阶段不会暂停用户线程,但初始标记和重新标记阶段仍会暂停。CMS适合那些对停顿时间要求严格的应用。
**配置示例**:
```bash
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction= # 设置CMS启动时的堆内存使用百分比
```
### 4. G1 GC(Garbage-First)
G1 GC是Java 7中引入的,旨在取代CMS GC成为新一代的垃圾收集器。G1将堆内存划分为多个大小相等的独立区域(Region),并基于区域进行垃圾回收。它采用了面向局部(Region-Based)的堆内存布局来优化停顿时间,同时满足高吞吐量的需求。G1 GC通过可预测的停顿时间模型来避免长时间的垃圾回收停顿,特别适用于大型堆内存和多核处理器的应用。
**配置示例**:
```bash
-XX:+UseG1GC
-XX:MaxGCPauseMillis=