如何在Eclipse Memory Analyzer Tool中将@retainedHeapSize与oql相加

时间:2011-06-29 09:13:01

标签: java eclipse oql

您是否使用过eclipse的MAT(Memory Analyzer Tool)。 它真的很酷。(1.5G堆转储文件kill jhat,ibm的堆转储分析器与OOME)。 MAT活着,快速,美丽,强大。

我想知道ehcahce键的内存大小是多少,所以写下面的oql。

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

不幸的是,sum(),max(),min()这样的组函数不存在。 我将总结果行(约60,000)导出到excel文件并在excel表中汇总。

您是否有关于使用组功能的提示或隐藏(?)功能/功能(如sum())?

4 个答案:

答案 0 :(得分:8)

据Memory Analyzer文档我所知,它的OQL中没有聚合函数。

但是,在VisualVm(自1.6以及downloadable as a standalone application以来的JDK中包含)中,您可以这样做:

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 :(得分:3)

您可以从OQL结果生成直方图 - 选择“显示为直方图”图标。 在此直方图中,您可以使用“计算精确保留的设置”图标计算保留的大小。

答案 2 :(得分:0)

似乎没有办法在MAT或OQL中做到这一点

但是您可以通过其他方式来做到。

执行查询后,可以将结果导出到cvs文件。那么您可以通过excel sum工具获得结果。

答案 3 :(得分:0)

如果您更喜欢 MAT 而不是 Visual VM,并且不坚持使用 OQL,您也可以使用它的 calcite 插件 (https://github.com/vlsi/mat-calcite-plugin)。

求和的一个例子是:

SELECT sum(retainedSize(n.this['key']))
FROM "java.util.HashMap$Node" n

您可以在此处将其功能与 oql 进行比较:https://wiki.eclipse.org/MemoryAnalyzer/OQL#OQL_.28Memory_Analyzer.29_versus_SQL_.28MAT.2FCalcite.29