Java JVM调优实战指南:从内存模型到高频参数
(附自绘内存图+真实案例解析)
一、JVM内存模型图解
┌───────────────────────────────┐
│ JVM内存结构 │
├──────────────┬──────────────┤
│ 堆(Heap) │ 非堆(Non-Heap) │
│ ▼ ▼
│ ┌───────────────────────┐ ┌──────────────┐
│ │ 新生代(Young) │ │ 元空间 │
│ │ ┌─────┬─────┬─────┐ │ │(Metaspace) │
│ │ │ Eden│ S0 │ S1 │ │ └──────────────┘
│ │ └─────┴─────┴─────┘ │
│ │ │ ┌──────────────┐
│ │ 老年代(Old) │ │ 代码缓存 │
│ └───────────────────────┘ │(Code Cache) │
│ └──────────────┘
├────────────────────────────────┤
│ 虚拟机栈(JVM Stack) │
│ 本地方法栈(Native Stack) │
│ 程序计数器(PC Register) │
└───────────────────────────────┘
关键区域说明:
- 堆(Heap):
- 新生代:Eden区(新对象分配地) + 2个Survivor区(S0/S1,用于Minor GC后存活对象复制)。
- 老年代:长期存活的对象(经历多次Minor GC后晋升)。
- 非堆(Non-Heap):
- 元空间(Metaspace):存储类元数据(替代永久代)。
- 代码缓存(Code Cache):存储JIT编译后的本地代码。
二、JVM调优工具与命令
1. 监控分析工具
工具 | 命令/用法 | 核心功能 |
---|---|---|
jstat | jstat -gcutil <pid |