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)

各字段解释:

  • MinHeapFreeRatioMaxHeapFreeRatio:设置了 JVM 试图保持的最小和最大空闲堆比例(在 GC 后)。例如,如果空闲堆内存低于 MinHeapFreeRatio,堆会增长。
  • MaxHeapSize:堆的最大大小(通常通过 -Xmx 设置)。例如,上述值是 2048 MB。
  • NewSizeMaxNewSize:新生代(Young Generation)堆的最小和最大大小。
  • OldSize:老年代(Old Generation)的大小。
  • NewRatio:新生代和老年代大小的比例。NewRatio=2 表示老年代的大小是新生代的 2 倍。
  • SurvivorRatio:两个 Survivor 区域和 Eden 区域的比例,SurvivorRatio=8 表示 Eden 区的大小是 Survivor 区的 8 倍。
  • MetaspaceSizeMaxMetaspaceSize:元空间(用于存放类元数据)的初始大小和最大大小。
  • 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 运行时类元数据和类指针压缩空间的使用情况