0

我正在使用 MAT 分析我的堆并查看一些有用的报告。例如,此报告列出了空集合中可能的内存浪费。

MAT 版本:1.11.0

正如您从屏幕截图中看到的那样,报告中的每个项目仅列出所有对象的前 10 个。

在此处输入图像描述

如果我单击“...对象的前 10 个”,期望看到更多对象,实际上并非如此。我能看到的只有那 10 个对象。我看不到显示更多对象的方法,例如“显示下一个 10 个对象”按钮。请参阅下面的屏幕截图。

在此处输入图像描述

我正在寻找一种查看所有 365 个对象的方法。某处有这样的按钮吗?或者我必须为此编写 OQL?我真的是 OQL 的新手,有人能给我举个例子吗?感谢任何帮助!

注意: ThreadLocalMap 仅用于说明和更好的屏幕截图,我实际上是在寻找空的 HashMap 的来源。

4

1 回答 1

0

MAT 只有前 10 个对象的链接的原因是为了减小生成的 HTML 页面的大小。在报告中包含每个对象可能会使报告变得庞大。有时,报告有一个图标,其标题旁边有一个带有黄色箭头的窗口。您可以使用它将该部分作为查询运行。

Memory Analyzer 1.12 对报告进行了一些改进,但仍然有 10 个对象的限制。

如果您很高兴从整个快照中了解 HashMap,则使用直方图查询找到它们,然后运行“Java 集合”>“按大小分组的集合”

如果您想查看属于某个组件的 HashMap,那就更难了。MAT 将组件的根集定义为类加载器、由该加载器加载的所有类,以及那些本身不是类或类加载器的类的所有实例。从帮助:

使用这个根对象集,组件报告计算一个定制的保留集。该保留集包括由根集保持活动的所有对象。此外,它假定所有已变为可终结的对象实际上已被终结,并且所有软引用也已被清除。

于 2022-01-18T07:21:44.707 回答