CentOS上的Java垃圾回收机制基于JVM实现,核心是通过分代收集和多种垃圾回收器组合管理内存,以下是关键解析:
对象存活判定
垃圾回收算法
类型 | 特点 | 适用场景 | 参数 |
---|---|---|---|
Serial | 单线程,STW(Stop The World)停顿时间长,简单高效 | 客户端/小内存应用 | -XX:+UseSerialGC |
Parallel | 多线程并行回收,追求高吞吐量,STW较长 | 后台计算、批处理任务 | -XX:+UseParallelGC |
CMS | 并发标记清除,减少STW,但会产生碎片,需配合Serial Old处理老年代 | 低延迟Web服务(JDK9已标记废弃) | -XX:+UseConcMarkSweepGC |
G1 | 分Region回收,可预测停顿,优先回收垃圾多的区域,支持大内存 | 大内存、高响应应用(JDK9+默认) | -XX:+UseG1GC |
ZGC/Shenandoah | 超低延迟(<10ms),全程并发,支持TB级堆内存(Java 11+引入) | 金融交易、超大规模数据处理 | -XX:+UseZGC |
内存参数
-Xms
/-Xmx
:设置堆初始和最大内存(建议相等,避免动态调整开销)。-Xmn
:设置新生代大小,影响Minor GC频率(默认占堆的1/3)。-XX:SurvivorRatio
:设置Eden与Survivor区比例(默认8:1:1)。GC策略选择
监控与调优工具
jstat
:监控GC次数、耗时等指标。jmap
/jhat
:生成堆转储文件,分析内存泄漏。VisualVM
/Arthas
:可视化分析GC行为、对象引用链。参考来源:[1,2,3,4,5,6,7,8,9,10,11]