推荐链接:     总结——》【Java】     总结——》【Mysql】     总结——》【Redis】     总结——》【Kafka】     总结——》【Spring】     总结——》【SpringBoot】     总结——》【MyBatis、MyBatis-Plus】     总结——》【Linux】     总结——》【MongoDB】     总结——》【Elasticsearch】

JVM——》jmap详解

一、概念二、作用三、参数四、示例1、查看运行中的 Java 进程2、查看 24126 进程的堆内存使用情况

五、输出结果详细介绍

一、概念

jmap -heap 是一个Java 命令行工具,用于获取Java 进程的堆内存信息。它会输出 Java 进程的整体堆内存使用情况,包括 heap 总大小、已使用大小、空闲大小等。同时还会输出堆内存中各种对象所占用的空间大小以及数量,如类、字符数组、字符串等。

二、作用

jmap -heap 命令通常用于诊断和调试 Java 应用程序的内存问题,例如内存泄漏、内存溢出等。 通过 jmap -heap 命令获取到的堆内存信息可以帮助开发人员更加全面地了解 Java 应用程序的内存使用情况,找出内存问题的根本原因,并进行相应的优化和改进。 在使用 jmap -heap 命令时,需要注意以下几点:

jmap -heap 命令会暂停 Java 进程的执行并进行内存快照,可能会对应用程序的性能产生一定的影响。jmap -heap 命令只能用于 HotSpot 虚拟机,不适用于其他虚拟机实现。jmap -heap 命令可能会产生较大的输出,建议将输出重定向到文件中以便后续分析。

三、参数

jmap -heap 命令是一个 Java 命令行工具,用于获取 Java 进程的堆内存信息。它包含以下参数:

-dump:导出 Java 堆内存中的内容到文件中。-file:指定导出文件的文件名,如果不指定则默认为 java_pid[进程 ID].hprof。-F:强制执行指令,即使 JVM 正在退出或者已经退出。-histo:打印 Java 堆内存中各个对象类型的实例数目和大小。-J:传递参数给 JVM,例如“-J-Xms512m”。

四、示例

1、查看运行中的 Java 进程

ps -ef | grep java

2、查看 24126 进程的堆内存使用情况

jmap -heap 24126

Attaching to process ID 24126, please wait...

Debugger attached successfully.

Server compiler detected.

JVM version is 25.121-b13

using thread-local object allocation.

Parallel GC with 4 thread(s)

Heap Configuration:

MinHeapFreeRatio = 0

MaxHeapFreeRatio = 100

MaxHeapSize = 5368709120 (5120.0MB)

NewSize = 2684354560 (2560.0MB)

MaxNewSize = 2684354560 (2560.0MB)

OldSize = 2684354560 (2560.0MB)

NewRatio = 1

SurvivorRatio = 8

MetaspaceSize = 21807104 (20.796875MB)

CompressedClassSpaceSize = 1073741824 (1024.0MB)

MaxMetaspaceSize = 17592186044415 MB

G1HeapRegionSize = 0 (0.0MB)

Heap Usage:

PS Young Generation

Eden Space:

capacity = 1009254400 (962.5MB)

used = 474955488 (452.9528503417969MB)

free = 534298912 (509.5471496582031MB)

47.06003639914773% used

From Space:

capacity = 834142208 (795.5MB)

used = 326834600 (311.69376373291016MB)

free = 507307608 (483.80623626708984MB)

39.182119891000646% used

To Space:

capacity = 793247744 (756.5MB)

used = 0 (0.0MB)

free = 793247744 (756.5MB)

0.0% used

PS Old Generation

capacity = 2684354560 (2560.0MB)

used = 1371482032 (1307.9471893310547MB)

free = 1312872528 (1252.0528106689453MB)

51.091687083244324% used

53559 interned Strings occupying 6180024 bytes.

五、输出结果详细介绍

# 查看 24126 进程的堆内存使用情况

jmap -heap 24126

jmap -heap 24126

# 表示 jmap 正在尝试连接并附加到一个进程ID为 24126 的Java进程

Attaching to process ID 24126, please wait...

# 表示 jmap 已经成功附加到了该进程并成功连接了调试器

Debugger attached successfully.

# 表示该 Java 进程正在运行 Server 模式的编译器

Server compiler detected.

# 表示该 Java 程序的版本号为 25.121-b13

JVM version is 25.121-b13

# 表示 Java 进程正在使用线程本地对象分配的方式

using thread-local object allocation.

# 表示 Java 进程正在使用 4 个线程来进行并行垃圾回收

Parallel GC with 4 thread(s)

# 堆内存配置信息

Heap Configuration:

MinHeapFreeRatio = 0 # 表示在堆内存达到最大值之前,堆内存中不允许有任何自由空间

MaxHeapFreeRatio = 100 # 表示在堆内存达到最大值之后,堆内存中允许全部是自由空间

MaxHeapSize = 5368709120 (5120.0MB) # 表示堆内存的最大容量为 5GB

NewSize = 2684354560 (2560.0MB) # 表示新生代(Young Generation)的初始容量为 2.5GB

MaxNewSize = 2684354560 (2560.0MB) # 表示新生代的最大容量为 2.5GB

OldSize = 2684354560 (2560.0MB) # 表示老年代(Old Generation)的初始容量为 2.5GB

NewRatio = 1 # 表示新生代与老年代内存大小的比例为 1:1

SurvivorRatio = 8 # 表示 Eden 区域与 Survivor 区域之间内存大小的比例为 8:1

MetaspaceSize = 21807104 (20.796875MB) # 表示元数据区域的大小为 20.8MB

CompressedClassSpaceSize = 1073741824 (1024.0MB) # 表示压缩类空间的大小为 1GB

MaxMetaspaceSize = 17592186044415 MB # 表示元数据区域的最大容量为 16 EB(exabytes)

G1HeapRegionSize = 0 (0.0MB) # 表示 G1 垃圾回收器使用的内存段的大小为 0

# 堆内存的使用情况

Heap Usage:

PS Young Generation # 表示使用了 Parallel Scavenge(PS)年轻代内存的信息

Eden Space: # 表示 Eden 区域的使用情况

capacity = 1009254400 (962.5MB) # 表示 Eden 区域的最大容量为 962.5MB

used = 474955488 (452.9528503417969MB) # 表示 Eden 区域已使用的内存大小为 452.95MB

free = 534298912 (509.5471496582031MB) # 表示 Eden 区域尚未使用的内存大小为 509.55MB

47.06003639914773% used

From Space: # 表示 Survivor 0 区域的使用情况

capacity = 834142208 (795.5MB) # 表示 Survivor 0 区域的最大容量为 795.5MB

used = 326834600 (311.69376373291016MB) # 表示 Survivor 0 区域已使用的内存大小为 311.69MB

free = 507307608 (483.80623626708984MB) # 表示 Survivor 0 区域尚未使用的内存大小为 483.81MB

39.182119891000646% used

To Space: # 表示 Survivor 1 区域的使用情况

capacity = 793247744 (756.5MB) # 表示 Survivor 1 区域的最大容量为 756.5MB

used = 0 (0.0MB) # 表示 Survivor 1 区域尚未使用任何内存

free = 793247744 (756.5MB) # 表示 Survivor 1 区域尚未使用的内存大小为 756.5MB

0.0% used

PS Old Generation # 表示使用了 Parallel Scavenge(PS)老年代内存的信息

capacity = 2684354560 (2560.0MB) # 表示老年代的最大容量为 2.5GB

used = 1371482032 (1307.9471893310547MB) # 表示老年代已使用的内存大小为 1307.95MB

free = 1312872528 (1252.0528106689453MB) # 表示老年代尚未使用的内存大小为 1252.05MB

51.091687083244324% used # 表示老年代已使用内存占总内存的比例为 51.09%

53559 interned Strings occupying 6180024 bytes.

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: