如何在Eclipse Memory Analyzer Tool中使用OQL计算@retainedHeapSize的总和

20

你用过Eclipse的MAT(内存分析工具)吗?它真的很酷。(1.5G堆转储文件能轻松应付jhat、IBM的heap dump analyzer和OOME)。 MAT功能强大,运行速度快,界面美观。

我想知道ehcache键的内存大小,所以写了下面的oql查询。

SELECT c.key.@retainedHeapSize 
FROM net.sf.ehcache.store.compound.HashEntry c 

很遗憾,像sum()、max()、min()这样的分组函数不存在。我将总结果行(约60,000行)导出到Excel文件中,并在表格中进行求和。

你是否有关于使用分组函数(如sum())的提示或隐藏的功能/特性?

4个回答

15
您可以从OQL的结果中生成直方图 - 选择“显示为直方图”图标。通过这个直方图,您可以使用“计算精确保留集”图标来计算保留大小。

完美!非常感谢~~~~~ - hedleyyan

9
据我从Memory Analyzer文档中了解,它的OQL中没有聚合函数。
然而,在VisualVm(自JDK 1.6起已包含,并且可作为独立应用程序下载),您可以这样做:
select sum(heap.objects('net.sf.ehcache.store.compound.HashEntry'), 'rsizeof(it)')

或者,如果您想要浅层大小而不是保留大小-请将“rsizeof”更改为“sizeof”:
select sum(heap.objects('net.sf.ehcache.store.compound.HashEntry'), 'sizeof(it)')

1
似乎在MAT或OQL中没有办法做到这一点,但是你可以通过其他方式实现。在执行查询后,你可以将结果导出到csv文件中,然后可以通过Excel求和工具获取结果。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接