前言
在之前的《Java Mission Control(JMC)介绍》中已经介绍了如何使用JMC工具监控JVM的状态,最近在做项目的过程中遇到了内存偏高的情况,这时我想起了JMC工具。
内存监控
连接JVM之后,点击“内存”页签,我们可以看到动态的内存使用详情。
图中各个参数意义:
参数 | 类型 | 描述 |
---|---|---|
Code Cache | 非堆内存 | 代码 |
Mataspace | 非堆内存 | Java 8之后取代PermGen永久代对内存,存储class类元数据 |
Eden Gen | 堆内存 | 新生代初始区,new的对象最先放到该区 |
Survivor Space | 堆内存 | 新生代中转区,平均分成2份From/To,保持一份是空的,GC时会从Eden转到该区 |
Tenured Gen | 堆内存 | 老年代,GC达到一定次数还存活的对象转到该区 |
通过在shell中执行jcmd命令可以得到更详细信息
shell>jcmd <PID> VM.native_memory [baseline|detail[.diff]] [scale=kb|mb|gb]
运行结果
Native Memory Tracking:
Total: reserved=172804KB, committed=94236KB
Java Heap (reserved=102400KB, committed=53736KB)
堆 (mmap: reserved=102400KB, committed=53736KB)
Class (reserved=18221KB, committed=18173KB)
元数据 (classes