jvm的垃圾回收器种类作用
时间: 2025-05-27 19:20:11 浏览: 21
### JVM垃圾回收器种类及其作用
#### 1. **Serial 收集器**
`Serial` 是最基础的垃圾收集器之一,主要用于新生代垃圾回收。它是单线程工作的,在垃圾回收期间会触发 Stop-The-World (STW),即暂停所有用户线程。这种收集器适用于小型应用程序或嵌入式设备中的客户端模式下运行的虚拟机[^1]。
优点在于其实现简单且高效(针对单线程环境),但在现代多核处理器环境中表现不佳。
```java
// 启动 Serial GC 参数
-XX:+UseSerialGC
```
---
#### 2. **ParNew 收集器**
`ParNew` 是 `Serial` 的多线程版本,专门用于新生代垃圾回收。它同样会在垃圾回收时引发 STW,但通过并行处理多个线程可以显著缩短停顿时间。因此,相比于 `Serial`,它更适配于具有多核 CPU 的服务器端应用[^3]。
虽然提高了效率,但如果堆内存较大,则仍可能出现较长的停顿时间。
```java
// 启动 ParNew GC 参数
-XX:+UseParNewGC
```
---
#### 3. **Parallel Scavenge (吞吐优先)**
这是一种专注于提升系统整体吞吐量的新生代垃圾收集器。与 `ParNew` 类似,它也是多线程运作;然而,不同于后者关注最小化停顿时间的设计理念,`Parallel Scavenge` 致力于最大化程序执行的有效时间比例[^4]。
特别适合那些对响应速度要求不高但希望获得更高性能的应用场合,例如后台批量处理任务。
```java
// 启动 Parallel Scavenge GC 参数
-XX:+UseParallelGC
```
---
#### 4. **CMS (Concurrent Mark-Sweep)**
`CMS` (Concurrent Mark Sweep)是一个面向老年代的垃圾收集器,旨在提供较低的延迟体验。其核心策略是尽可能让大部分垃圾回收动作与用户的正常业务逻辑并发执行,从而减少因 STW 导致的服务中断现象[^4]。
不过,由于采用了标记-清除算法而非复制算法,容易造成内存碎片问题,进而可能需要依赖额外的 Full GC 来解决问题。
```java
// 启动 CMS GC 参数
-XX:+UseConcMarkSweepGC
```
---
#### 5. **G1 (Garbage First)**
作为一款现代化的垃圾收集器,`G1` 将整个 Java 堆划分为许多大小相等的小块区域 (`Region`),并通过预测模型来决定何时以及如何进行局部或者全局范围内的垃圾回收活动[^4]。
相比传统的分代式方法,这种方式不仅有助于更好地平衡各部分之间的负载压力,还支持更加精细地设定期望的最大停顿时间目标。
```java
// 启动 G1 GC 参数
-XX:+UseG1GC
```
---
#### 总结表 | 不同垃圾回收器的作用对比
| 名称 | 主要用途 | 特点 |
|--------------------|--------------------|------------------------------------------------------------------------------------------|
| Serial | 客户端模式 | 单线程、简单高效 |
| ParNew | 新生代, 多核 | 多线程版 Serial,降低 STW 时间 |
| Parallel Scavenge | 高吞吐量需求 | 注重吞吐量优化 |
| CMS | 老年代, 低延迟 | 减少停顿时间 |
| G1 | 综合优化 | 动态调整、分区管理 |
---
阅读全文
相关推荐




















