jvm-jmap(内存映像工具)的使用

本文详细介绍了Java内存工具jmap的使用,包括查看内存映像信息、Finalizer队列、Java堆详细信息、生成堆转储快照等功能。通过jmap,可以获取堆转储、查询类加载信息、分析内存占用等,对于理解和诊断JVM内存问题具有重要作用。在Linux环境下,jmap能提供更全面的信息,如打印等待终结的对象、显示Java堆详细配置等。
摘要由CSDN通过智能技术生成

上文:JVM-jinfo的使用


jmap:Java内存映像工具是什么?可以干什么?

    jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。

可以干什么?

java memory = direct memory(直接内存) + jvm memory(MaxPermSize +Xmx)

jmap的作用并不仅仅是为了获取堆转储快照,它还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等。

实现

c771d43dc54f5cb2e973c4b014d04619.png

查看进程的内存映像信息

打印出共享对象映射打印目标虚拟机中加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径全称。

jmap 20220

1d3a39f7ce6b61005a236d3e2850fe56.png

对应 起始地址、映射大小、共享对象文件的路劲全称

查看Finalizer队列

打印等待终结的对象信息

jmap -finalizerinfo 20220

注意:这种只在Linux系统上面生效,在windows上面该命令查不出什么来。

a1b651afc255cd38ee972c56d2a7e8e9.png

Number of objects pending for finalization: 0 证明当前等待队列为0

显示 Java 堆详细信息

注意:该查询会导致

jmap -heap 20220

09f06defd1aebd0cf08c27ad3a319b8c.png

MinHeapFreeRatio        

-XX:MinHeapFreeRatio设置JVM堆最小空闲比率

MaxHeapFreeRatio        

-XX:MaxHeapFreeRatio设置JVM堆最大空闲比率

MaxHeapSize

最大堆内存3972MB

NewSize

新生代默认大小 83MB

MaxNewSize

新生代最大大小为 1324MB

OldSize

老年代大小 167MB

NewRatio

新生代和老年代的大小比率 2

SurvivorRatio

年轻代中Eden和Survivor的比率 8

MetaspaceSize

元空间大小 20.796875MB

CompressedClassSpaceSize

如果开启了-XX:+UseCompressedOops及-XX:+UseCompressedClassesPointers(默认是开启),则UseCompressedOops会使用32-bit的offset来代表java object的引用,而UseCompressedClassPointers则使用32-bit的offset来代表64-bit进程中的class pointer;可以使用CompressedClassSpaceSize来设置这块的空间大小

MaxMetaspaceSize

最大元空间大小 1073741824

G1HeapRegionSize

G1收集器启用,一个Region的大小可以通过参数-XX:G1HeapRegionSize设定,取值范围从1M到32M,且是2的指数。

显示class的内存情况

jmap -histo 20220

8ac9ecb70a326392e217e35fb28ba3b1.png

instances:实例数;

bytes:内存占用大小;

classs name:类名。

从大到小排序

jmap -histo:live 20220

d978781238cf610328708b6ab4c41fe4.png

生成文件

jmap -histo:live 20220>D://hong.log

738de7e4abd45f1c7c6ff422342a195c.png

ebf1b8148531f74f2524fa01c64a55fb.png

打印类加载信息

jmap -clstats 20220

98d4453b1d5da24646dd7fb7b1cd742a.png

打印Java堆内存的永久保存区域的类加载器的智能统计信息。对于每个类加载器而言,它的名称、活跃度、地址、父类加载器、它所加载的类的数量和大小都会被打印。此外,包含的字符串数量和大小也会被打印。

生成堆转储快照文件

注意:会暂停应用

jmap -dump:live,format=b,file=D://hong2.log 20220

参数:

option:选项参数,不可同时使用多个选项参数

pid:java进程id,命令ps -ef | grep java获取

executable:产生核心dump的java可执行文件

core:需要打印配置信息的核心文件

remote-hostname-or-ip:远程调试的主机名或ip

server-id:可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器

dda06721c5f02f1fe992df191e75b196.png

打开D盘中的文件。(这个文件在jhat中可以被分析)

ee06d6b11cdcd020915eadf4fad7f38a.png

参考:

    https://blog.csdn.net/weixin_37335761/article/details/110506369

    https://docs.oracle.com/javase/7/docs/technotes/tools/share/jmap.html

    https://docs.oracle.com/javase/9/tools/jmap.htm#JSWOR746

往期推荐

JVM-jinfo的使用

JVM-jstat(虚拟机统计信息监视工具)的使用

jvm的jps简单使用

jvm空间分配担保怎么回事?

jvm动态对象年龄判定

jvm参数PretenureSizeThreshold让对象直接进入老年代!

实战-配置+OmitStackTraceInFastThrow 导致不打印日志具体信息

6e101ef15e0c3fad430a2da1f287d74a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值