JVM 调优
JVM 调优是提升 Java 应用程序性能和稳定性的关键手段,主要涉及堆内存管理、原生内存配置、垃圾回收(GC)策略、JIT 编译优化以及同步机制的优化等方面。通过合理的调优,可以有效减少 GC 停顿、内存溢出、响应延迟等问题。
一、堆内存使用调优
1. 内存分配率调优
目标:提高新生代与老年代的分配效率,减少频繁 GC。
- 调整新生代与老年代比例(如 1:2),根据对象生命周期分布做出优化。
- 经验策略:如果应用中短生命周期对象多(如 Web 服务),应增加新生代大小。
- 案例:某电商系统频繁 Full GC,调整新生代比例从 1:2 改为 2:1,GC 次数减少 70%。
2. 内存分配方式调优
- 启用对象在栈上分配(逃逸分析)可避免大量堆分配压力。
- 对大对象直接分配到老年代可避免新生代频繁 GC。
- 案例:日志处理系统中批量构建大 JSON 对象,通过调优 Survivor 区比例及大对象直接晋升策略,GC 停顿从 800ms 降到 200ms。
3. 对象管理
- 尽量复用对象,避免频繁创建临时对象。
- 清除无用引用(避免软/弱引用滥用)。
- 引入对象池机制(连接池、线程池、缓冲池)。
4. 内存溢出问题
常见堆内存溢出原因:
- 对象无法被回收,如缓存未清理、静态集合引用。
- 新生代过小,频繁 Minor GC。