jVisualVM的内存检查器中"保留大小"是什么意思?

Myk*_*ych 13 java heap profiling jvisualvm

摘要选项卡上的Jvisualvm堆转储具有按保留大小检查bigest对象的功能.

保留的真正含义是什么?如何计算和显示对象树的大小?
如果我可以在这里看到对象(10M)和它的成员对象(5M)我应该如何计算堆影响.他们俩都花了10M或15M的堆?
为什么我看不到任何外观巨大的应用程序对象?

谢谢.

Pet*_*rey 9

保留的真正含义是什么?

完整的gc之后会有多大.例如,在GC之后,具有大量条目的WeakHashMap可能为空.

如何计算和显示对象树的大小?

JVM使用内部API确定这一点.

如果我可以在这里看到对象(10M)和它的成员对象(5M)我应该如何计算堆影响.他们俩都花了10M或15M的堆?

总数为10 MB.如果这是你最大的问题,除非你的机器只有几百MB,否则不用担心.(在这种情况下我会升级它)

为什么我看不到任何外观巨大的应用程序对象?

也许它们的记忆力不如你想象的那么大?例如,装载它们可能很昂贵,但这并不会使它们变得庞大.

顺便说一句:VisualVM是一个很好的免费内存分析器,但它只对找到明显的问题很有用.我会尝试像YourKit这样的商业分析器(您可以获得免费的eval许可证)进行比较.