jvisualvm - 如何查看具有内存消耗的活动对象
Posted
技术标签:
【中文标题】jvisualvm - 如何查看具有内存消耗的活动对象【英文标题】:jvisualvm -how to see live objects with memory consumption 【发布时间】:2012-05-25 10:37:29 【问题描述】:我正在尝试使用 JVisualVM 查看我的应用程序活动对象及其相应的内存计数(可能在包级别)
当我使用 jstad 连接时如何实现同样的效果
谢谢
【问题讨论】:
【参考方案1】:VisualVM 绝对支持通过堆转储查看和检查实时对象,以及实时采样分配。
对于堆转储,右键单击进程,选择 Heap Dump。
这将打开堆转储视图。在 Summary 页面上,您可以通过保留大小计算 n 个最大的对象,然后点击进入各种视图。
它提供与上面建议的使用 jmap 和 mat 基本相同的功能,但工作流程和可用性要好得多。
【讨论】:
【参考方案2】:我很确定你不能对正在运行的进程使用 VisualVM 来做到这一点。您需要做的是使用 jmap 进行堆转储(例如 jmap -dump:format=b,file=heapdump.bin),然后使用像 mat 这样的工具来分析该转储。
请注意,堆转储会在相当长的时间内阻塞您的进程,尤其是在您有大堆的情况下。
您还可以在更一般的级别上获取信息,即针对您的进程运行 jmap -histo:live 以查看每种类型的对象数量及其足迹。
【讨论】:
jmap 很棒,感谢您的提示。我只是用它来获取大小为 17GB 的堆的活动对象列表,这大约需要 3 秒。出于我的目的,为每个类获取多个实例足以识别内存膨胀。以上是关于jvisualvm - 如何查看具有内存消耗的活动对象的主要内容,如果未能解决你的问题,请参考以下文章