当我在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吗?
答案 0 :(得分:0)
首先,在设置jmap
目录的所有权限后,%TMP%\hsperfdata_<username>
在Windows 10和JDK 1.8.0_192上对我有效。
第二,您可以使用jmap
工具来代替VisualVM
:
它有一个Sampler
实用程序,可用来检查堆直方图。
如果在左侧列表中没有看到Java进程,请尝试使用-Dcom.sun.management.jmxremote
属性。
答案 1 :(得分:0)
jmap -histo现在至少可以用于Oracle JDK。 您也可以将Jconsole用于不完全相同但描述性强的信息。 您可以将Jhat用于上面看到的信息以及浏览器上的许多其他信息。
答案 2 :(得分:0)
但是不幸的是,Oracle不支持此功能,并且在最新的Windows和Linux JDK发行版中不可用。
那是不正确的信息。
我在安装了OpenJDK Java 11的情况下运行Fedora 29,并且肯定存在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/jmap
OpenJDK Java 11可用于Fedora(当前版本),CentOS 7和8,RHEL 7和8,Ubuntu 16.04和18.04,Debian 9...。
对于Oracle发行版,我可以在Oracle Java 12 SE文档中看到jmap
手册页:
因此可以安全地假设在安装Oracle JDK发行版时将使用该工具。