我可以在heapdump文件中看到String类耗尽内存,但我怎么知道这些字符串是什么?
答案 0 :(得分:4)
如果您使用VisualVM
,则可以使用几个OQL
查询来读取您要查找的Java堆中的数据。一个可能适合您需求的命令是:
select {instance: s, content: s.toString()} from java.lang.String s
where /java/(s.toString())
你可以在这里找到更多:https://visualvm.java.net/oqlhelp.html
答案 1 :(得分:3)
我使用一个小的Spring Boot应用程序和Eclipse Memory Analyzer来模拟它。堆转储是从MAT内部创建的,但您也可以打开已经创建的堆转储。
当您打开堆转储时,MAT会自动显示哪些内存占用了大量内存:
当您打开详细信息时,您可以在String
Accumulated Objects in Dominator Tree
个实例及其值(在我的屏幕截图中以黄色标记)
简短说明:您也可以在MAT中运行OQL: