JVM垃圾回收机制
GC算法详解
flowchart TD
    GC算法[GC算法]
    GC算法 --> 标记_清除[标记-清除]
    GC算法 --> 标记_整理[标记-整理]
    GC算法 --> 复制算法
    GC算法 --> 分代收集
垃圾收集器对比
| 收集器 | 
算法 | 
适用区域 | 
特点 | 
| Serial | 
复制 | 
新生代 | 
单线程,STW | 
| ParNew | 
复制 | 
新生代 | 
多线程版Serial | 
| Parallel Scavenge | 
复制 | 
新生代 | 
吞吐量优先 | 
| Serial Old | 
标记-整理 | 
老年代 | 
Serial老年代版 | 
| Parallel Old | 
标记-整理 | 
老年代 | 
Parallel Scavenge老年代版 | 
| CMS | 
标记-清除 | 
老年代 | 
低延迟,并发收集 | 
| G1 | 
分代+分区 | 
全堆 | 
可预测停顿 | 
GC日志分析
# 典型GC日志
[GC (Allocation Failure) [PSYoungGen: 65536K->10752K(76288K)] 65536K->15488K(251392K), 0.0118329 secs]
# 关键字段说明:
- PSYoungGen:Parallel Scavenge收集器新生代
- 65536K->10752K:回收前->回收后大小
- (76288K):新生代总容量
- 65536K->15488K:堆回收前后大小
- (251392K):堆总容量
- 0.0118329 secs:耗时
 
调优案例
# 电商系统配置示例
-Xms4g -Xmx4g 
-XX:NewRatio=1 
-XX:SurvivorRatio=8 
-XX:+UseG1GC 
-XX:MaxGCPauseMillis=200 
-XX:InitiatingHeapOccupancyPercent=45
 
最佳实践
- 小内存应用(4G内):CMS
 
- 大内存应用(8G+):G1
 
- 吞吐优先:Parallel Scavenge+Parallel Old
 
- 避免频繁Full GC
 
- 合理设置新生代比例