jmap
以下是 jmap -heap <PID> 输出内容的常见解释:
1. Heap Configuration(堆配置)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 2147483648 (2048.0MB)
NewSize = 1363144 (1.3MB)
MaxNewSize = 17592186044415 MB
OldSize = 54525952 (52.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.8MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 17592186044415 MB
G1HeapRegionSize = 1048576 (1.0MB)
各字段解释:
- MinHeapFreeRatio 和 MaxHeapFreeRatio:设置了 JVM 试图保持的最小和最大空闲堆比例(在 GC 后)。例如,如果空闲堆内存低于
MinHeapFreeRatio,堆会增长。 - MaxHeapSize:堆的最大大小(通常通过
-Xmx设置)。例如,上述值是 2048 MB。 - NewSize 和 MaxNewSize:新生代(Young Generation)堆的最小和最大大小。
- OldSize:老年代(Old Generation)的大小。
- NewRatio:新生代和老年代大小的比例。
NewRatio=2表示老年代的大小是新生代的 2 倍。 - SurvivorRatio:两个 Survivor 区域和 Eden 区域的比例,
SurvivorRatio=8表示 Eden 区的大小是 Survivor 区的 8 倍。 - MetaspaceSize 和 MaxMetaspaceSize:元空间(用于存放类元数据)的初始大小和最大大小。
- CompressedClassSpaceSize:用于存放类信息的压缩空间大小。
- G1HeapRegionSize:如果使用 G1 GC,这是每个堆区域的大小。
2. Heap Usage(堆使用情况)
Heap Usage:
G1 Heap:
regions = 2048
capacity = 2147483648 (2048.0MB)
used = 1073741824 (1024.0MB)
free = 1073741824 (1024.0MB)
50.000000% used
各字段解释:
- regions:G1 GC 中的堆区域总数。
- capacity:堆的总容量。
- used:已使用的堆内存。
- free:未使用的堆内存。
- % used:堆内存使用的百分比。
3. 各代内存区域的详细信息
New Generation (Eden + Survivor)
G1 Young Generation:
Eden Space:
regions = 256
capacity = 536870912 (512.0MB)
used = 536870912 (512.0MB)
free = 0 (0.0MB)
100.000000% used
Survivor Space:
regions = 32
capacity = 67108864 (64.0MB)
used = 33554432 (32.0MB)
free = 33554432 (32.0MB)
50.000000% used
Old Generation (老年代)
G1 Old Generation:
regions = 64
capacity = 1073741824 (1024.0MB)
used = 536870912 (512.0MB)
free = 536870912 (512.0MB)
50.000000% used
各区域解释:
- Eden Space:新生代中 Eden 区的内存使用情况。上例中 Eden 容量为 512 MB,已使用 100%。
- Survivor Space:新生代中 Survivor 区的内存使用情况。上例中容量为 64 MB,使用了 50%。
- Old Generation:老年代的内存使用情况。上例中容量为 1024 MB,使用了 50%。
4. Metaspace Usage(元空间使用情况)
Metaspace used 40960K, capacity 45056K, committed 45568K, reserved 1095680K
- Metaspace:存储类元数据的区域,不在堆内存中。
- used:元空间当前使用的内存。
- capacity:当前分配的容量。
- committed:JVM 实际为元空间分配的内存。
- reserved:JVM 可以为元空间保留的最大内存。
5. Compressed Class Space Usage(压缩类空间使用情况)
Compressed Class Space used 5120K, capacity 5632K, committed 5632K, reserved 1048576K
- Compressed Class Space:存储类相关信息的压缩空间(通常在使用
-XX:+UseCompressedClassPointers时启用)。 - used:已经使用的内存。
- capacity:可用的内存容量。
- committed:已经提交给操作系统的内存。
- reserved:可以保留的最大内存。
总结
- 堆配置(Heap Configuration):显示 JVM 配置的堆内存相关参数(如最大堆大小、新生代/老年代比例等)。
- 堆使用情况(Heap Usage):显示当前堆内存的使用情况(如已用内存、空闲内存等)。
- 新生代和老年代内存区域:分别显示 Eden 区、Survivor 区、老年代的详细内存使用情况。
- 元空间和压缩类空间使用情况:显示 JVM 运行时类元数据和类指针压缩空间的使用情况