摘要选项卡上的 Jvisualvm 堆转储具有按保留大小检查最大对象的功能。
保留的真正含义是什么?对象树的大小如何计算并在此处显示?
如果我可以在这里看到对象(10M)和它的成员对象(5M),我应该如何计算堆影响。他们都占用了 10M 还是 15M 的堆?
为什么我看不到我们的外观巨大的应用程序对象?
谢谢。
摘要选项卡上的 Jvisualvm 堆转储具有按保留大小检查最大对象的功能。
保留的真正含义是什么?对象树的大小如何计算并在此处显示?
如果我可以在这里看到对象(10M)和它的成员对象(5M),我应该如何计算堆影响。他们都占用了 10M 还是 15M 的堆?
为什么我看不到我们的外观巨大的应用程序对象?
谢谢。
保留的真正含义是什么?
一个完整的 gc 后会有多大。例如,具有大量条目的 WeakHashMap 在 GC 之后可能为空。
对象树的大小如何计算并在此处显示?
JVM 使用内部 API 确定这一点。
如果我可以在这里看到对象(10M)和它的成员对象(5M),我应该如何计算堆影响。他们都占用了 10M 还是 15M 的堆?
总大小为 10 MB。如果这是您最大的问题,除非您的机器只有 100 MB,否则不要担心。(在这种情况下我会升级它)
为什么我看不到我们的外观巨大的应用程序对象?
也许它们的内存没有你想象的那么大??例如,它们的加载可能很昂贵,但这并不会使它们变得庞大。
顺便说一句:VisualVM 是一个不错的免费内存分析器,但它只对发现明显的问题有用。我会尝试使用像 YourKit 这样的商业分析器(您可以获得免费的评估许可证)进行比较。
我认为 VisualVM 中“保留”的最佳定义是垃圾回收后剩余的内存量。
在某些情况下,它可能大于“大小”,因为它直接或间接引用其他对象(或集合)。
如果我可以在这里看到对象(10M)和它的成员对象(5M),我应该如何计算堆影响。他们都占用了 10M 还是 15M 的堆?
我认为它实际上占用了 15M 的堆,对象保留大小 10M 意味着,当这个对象(10M)被扫描时,10M 将是空闲的。成员 object(5M) 仍被其他对象引用,并且仍在堆中。成员对象的保留大小可以大于对象本身。