我正在尝试减少应用程序的内存占用。 JVisualVM堆转储报告占用最多空间的对象是:
哪个不是特别有用。如何将这些对象追溯到持有它们的父类?
由于
答案 0 :(得分:4)
VisualVM会计算保留的大小。您必须手动添加列,但默认视图似乎没有。
答案 1 :(得分:3)
这些原始数组很可能是String
之类的内部状态,它将状态保持在char[]
。一个好的剖析器将理解这一点,并将具有“保留大小”的概念,其描述了对象的大小,包括其子对象的大小。这表明String
占用了空间,而不是char[]
。
但是,我看不到VisualVM中提到的“保留大小”。它似乎没有适当的商业替代品的分析能力。
要查看我正在谈论的内容,请尝试下载YourKit的评估,并将其连接到您的应用。它比VisualVM复杂得多,但是它可以为你提供堆对象的保留大小,而且非常有启发性。它还将显示引用堆上每个对象的内容,以便跟踪泄漏。