在VisualVM / OQL中,如何从特定包中获取所有对象实例的总大小

时间:2013-03-26 20:11:40

标签: java jvisualvm oql

我正在使用VisualVm来分析在Tomcat中运行的Web应用程序。 Tomcat不断出现内存不足错误,所以我试图弄清楚我的应用程序是什么导致它。 当我从VisualVm运行内存分析器时,看起来大部分内存都被String / Char []占用,但除非我能找出那些知识对我来说非常好的字符串的更高级容器。在进行研究时,我发现了OQL和rsizeof(),所以我可以举例SELECT rsizeof(o) FROM instanceof my.package.class o,但我不知道我需要哪个类,所以我真的希望能够运行{{1}相反,但这不起作用。

那么OQL会是什么?理想情况下,我想限制前10名左右,并按大小排序。

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解但是......

OQL使用基于JavaScript的表达式语言,因此您可以使用以下语句,它将查找java.util.regex包内的所有对象(递归)并对它们的大小求和,它将返回一个数字:

sum(filter(heap.objects(), "/^java.util.regex./(classof(it).name)"), 'rsizeof(it)')

这将花费相同的时间,我只在小堆上测试过。注意包名开头的^