当我运行下面的jmap命令时:
jmap -histo 14104我能够看到我的对象的非常好的输出,三个实例,使用的字节。
num #instances #bytes class name
----------------------------------------------
1: 1308333 398374280 [C
2: 55058 84410136 [B
3: 1548041 49537312 java.lang.ref.Finalizer
4: 1584594 38030256 java.util.HashMap$Entry
5: 1327543 31861032 java.lang.String
6: 765682 25734336 [Ljava.lang.Object;但不幸的是,Oracle不支持这一点,并且在最新的Windows和Linux JDK发行版中也不支持。有没有人能帮我推荐一下jmap的替代品?
发布于 2018-12-24 05:01:57
首先,在设置了%TMP%\hsperfdata_<username>目录的所有权限后,jmap可以在Windows10和JDK 1.8.0_192上运行。
其次,你可以使用VisualVM工具而不是jmap:

它有一个Sampler实用程序,允许检查堆直方图。
如果您在左侧列表中没有看到您的Java进程,请尝试使用-Dcom.sun.management.jmxremote属性。
发布于 2019-09-22 20:12:17
jmap -histo至少现在可以在Oracle JDK上工作。您还可以使用Jconsole获取不同但非常描述性的信息。您可以使用Jhat获取上面看到的信息以及浏览器上的许多其他信息。
发布于 2019-09-22 22:07:40
,但不幸的是,甲骨文不支持这一点,并且在最新的Windows和Linux JDK发行版中也不可用。
这是不正确的信息。
我在安装了OpenJDK Java11的情况下运行Fedora29,jmap肯定是存在的:
$ ls -l /usr/bin/jmap
.... /usr/bin/jmap -> /etc/alternatives/jmap
$ ls -l /etc/alternatives/jmap
.... /etc/alternatives/jmap -> /usr/lib/jvm/java-11-openjdk-11.0.4.11-0.fc29.x86_64/bin/jmapDebianJava11可用于Fedora (当前版本),CentOS 7& 8,RHEL7& 8,Ubuntu16.04& 18.04,Debian9 ...举几个例子。
对于Oracle发行版,我可以在OracleJava12SE文档中查看jmap手册页面:
因此,在安装Oracle JDK发行版时,可以放心地假定该工具已经存在。
https://stackoverflow.com/questions/31833693
复制相似问题