jvisualvm是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvisualvm是啥相关的知识,希望对你有一定的参考价值。

参考技术A VisualVM 是Netbeans的profile子项目,已在JDK6.0 update 7 中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe),能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈(如100个String对象分别由哪几个对象分配出来的)。   在JDK_HOME/bin(默认是C:\Program Files\Java\jdk1.6.0_13\bin)目录下面,有一个jvisualvm.exe文件,双击打开,从UI上来看,这个软件是基于NetBeans开发的了。   从界面上看还是比较简洁的,左边是树形结构,自动显示当前本机所运行的Java程序,还可以添加远程的Java VM,其中括号里面的PID指的是进程ID。OverView界面显示VM启动参数以及该VM对应的一些属性。Monitor界面则是监控Java堆大小,Permgen大小,Classes和线程数量。Profiler界面比较有趣,看样子似乎可以动态的对某个Java程序进行调优了。不过我没试用这个功能,感觉要调优还是在Netbeans里面比较自然一点,起码有代码,没代码调优了用处也不大。而且这里还有个问题,有些VM是没有Threads跟Profiler界面的,不知道是什么原因,像我截图里面的Weblogic的Server就没有这两个界面。

jVisualVM 的内存检查器中的“保留大小”是啥意思?

【中文标题】jVisualVM 的内存检查器中的“保留大小”是啥意思?【英文标题】:What does "retained size" mean in jVisualVM's memory inspector?jVisualVM 的内存检查器中的“保留大小”是什么意思? 【发布时间】:2012-09-18 00:30:02 【问题描述】:

摘要选项卡上的 Jvisualvm 堆转储具有按保留大小检查最大对象的功能。

保留的真正含义是什么?对象树的大小如何计算并在此处显示? 如果我可以在这里看到对象(10M)和它的成员对象(5M),我应该如何计算堆影响。它们都占用了 10M 还是 15M 的堆? 为什么我看不到我们的外观巨大的应用程序对象?

谢谢。

【问题讨论】:

【参考方案1】:

保留的真正含义是什么?

完整 gc 后会有多大。例如。 GC 后具有大量条目的 WeakHashMap 可能为空。

如何计算对象树的大小并在此处显示?

JVM 使用内部 API 确定这一点。

如果我可以在这里看到对象 (10M) 和它的成员对象 (5M),我应该如何计算堆影响。它们都占用了 10M 还是 15M 的堆?

总大小为 10 MB。如果这是您最大的问题,除非您的机器只有 100 MB,否则不要担心。 (在这种情况下我会升级它)

为什么我看不到我们的外观巨大的应用程序对象?

也许它们的内存没有你想象的那么大??例如它们的加载可能很昂贵,但这并不会使它们变得庞大。

顺便说一句:VisualVM 是一个不错的免费内存分析器,但它只对发现明显的问题有用。我会尝试使用像 YourKit 这样的商业分析器(您可以获得免费的评估许可证)进行比较。

【讨论】:

facade 对象包含指向大 chache 对象的链接。在 jvisuavm 中,我可以在顶部看到缓存对象,但看不到应该至少相同大小的外观对象。 我是你的情况,我会尝试商业分析器,看看它是否会给你不同的观点。不同的分析器工作方式不同,因此如果您不确定一个分析器能否为您提供正确的结果,那么运行多个分析器会很有帮助。【参考方案2】:

我认为 VisualVM 中“保留”的最佳定义是垃圾回收后剩余的内存量。

在某些情况下,它可能大于“大小”,因为它直接或间接引用其他对象(或集合)。

【讨论】:

【参考方案3】:

如果我可以在这里看到对象 (10M) 和它的成员对象 (5M),我应该如何计算堆影响。它们都占用了 10M 还是 15M 的堆?

我认为它实际上占用了 15M 的堆,对象保留大小 10M 意味着,当这个对象(10M)被扫描时,10M 将是空闲的。成员 object(5M) 仍被其他对象引用,并且仍在堆中。成员对象的保留大小可以大于对象本身。

【讨论】:

以上是关于jvisualvm是啥的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jvisualvm进行cpu或内存抽样

jvisualVM的使用

Jvisualvm简单使用教程

jvisualvm图解

jvisualvm远程连接

jVisualVM远程监控配置