gpt4 book ai didi

Java VisualVM 内存采样器 - 如何获取特定类的大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:22:47 25 4
gpt4 key购买 nike

我的应用程序使用的内存比我想象的要多得多,我试图了解哪个类正在使用大量内存并且可能没有释放它。

我正在使用 VisualVM,在内存采样器中,我可以看到大部分内存都花在了字符、字符串和字节上,我所有的类都使用了字符串,但正如您所知,VisualVM 显示了系统中的所有字符和字符串(所有 Chars 都与 Strings 相同,这使得很难理解谁拥有它们),据我了解,保存这些字符串的其他类的大小是在没有字符串的情况下计算的。

我如何在这个工具中看到谁是“真正的”最大的类——包含所有这些字符串的类? (最好是我可以从这些类获取它们的字符串,而不是相反)我尝试在 heapDump 中使用“root to the nearest GC”,但大约有 4,000,000 个字符串,所以我找到“有问题的”字符串的机会非常小......

谢谢!!!

最佳答案

如果进行堆转储,您可以找到 20 个最大的对象(包括它引用的所有空间)。除此之外,我建议使用非常强大的 OQL 控制台。

基本上,您正在搜索以下内容:

Lot of String's taking up 20Mb 
--- kept alive by --->
HashSet#28839
--- kept alive by --->
MyOwnClass#88293

我建议你随机取一个字符串,找到它的推荐人并分析它,直到你找到一个可能的嫌疑人。一旦有了这个嫌疑,就可以使用 http://visualvm.java.net/oqlhelp.html#rsizeof 进行 OQL 查询。找出这些对象的总大小。

关于Java VisualVM 内存采样器 - 如何获取特定类的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8789386/

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