JMap替代品有哪些?

时间:2015-08-05 13:17:30

标签: java profiling jmap

当我在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吗?

3 个答案:

答案 0 :(得分:0)

首先,在设置jmap目录的所有权限后,%TMP%\hsperfdata_<username>在Windows 10和JDK 1.8.0_192上对我有效。

第二,您可以使用jmap工具来代替VisualVM

VisualVM in Memory Sampler Mode

它有一个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发行版时将使用该工具。