gpt4 book ai didi

java - 在 VisualVM/OQL 中,如何获取某个包中对象的所有实例的总大小

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:45 24 4
gpt4 key购买 nike

我正在使用 VisualVm 来分析在 Tomcat 中运行的 Web 应用程序。 Tomcat 不断因内存不足错误而崩溃,因此我试图找出应用程序中导致该错误的原因。当我从 VisualVm 运行内存分析器时,看起来大部分内存都被 String/Char[] 占用,但除非我能找出这些字符串的更高级别容器,否则这些知识对我没什么好处。在研究中我发现了 OQL 和 rsizeof()所以我可以例如 SELECT rsizeof(o) FROM instanceof my.package.class o但我不知道我需要哪个类,所以我真的很希望能够运行类似 SELECT it.name, rsizeof(o) FROM instanceof Filter(Heap.classes(), "/my.package./(it.name)"); 的东西相反,但这不起作用。

那么 OQL 是多少?理想情况下,我希望限制为前 10 个左右最大的,并按大小排序。

最佳答案

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

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

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

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

关于java - 在 VisualVM/OQL 中,如何获取某个包中对象的所有实例的总大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15646471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com