当前位置: 首页 > 面试题库 >

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

荀裕
2023-03-14
问题内容

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

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

谢谢。


问题答案:

保留的真正含义是什么?

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

对象树的大小如何计算并显示在此处?

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

如果我在这里可以看到对象(10M)及其成员对象(5M),我应该如何计算堆影响。他们俩都占用了10M或15M的堆吗?

总计为10 MB。如果这是您最大的问题,除非您有一台只有100 MB的计算机,否则不必担心。(在这种情况下,我将对其进行升级)

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

也许它们的记忆力不如您想像的那样??例如,加载它们可能会很昂贵,但这并不会使其变得庞大。

顺便说一句:VisualVM是一个不错的免费内存探查器,但是它仅用于发现明显的问题。我会尝试像YourKit这样的商业分析器(您可以获取免费的评估许可证)进行比较。



 类似资料:
  • 我看了最简单的物体,甚至那些都不一样...对于java.lang.Integer,VisualVm报告20个字节,而不是其他的16个字节(在我的解释中,这是因为从Integer类中提交的=12字节header+4字节int'value'=16,不需要填充)。 哪一个是正确的,为什么?

  • 我们的软件正在通过一个从内存流读取数据的GZipStream解压某些字节数据。这些数据以4KB的块解压缩,并写入另一个内存流。 我们已经意识到进程分配的内存远高于实际解压的数据。 示例:具有2425536字节的压缩字节数组被解压缩为23050718字节。我们使用的内存分析器显示了方法MemoryStream。设置容量(Int32值)分配的67104936字节。这是保留内存和实际写入内存之间的2.9

  • 问题内容: 我正在重构一些代码以使用guava Cache。 初始代码: 为了不破坏某些内容,我需要按原样保留任何引发的异常,而不用包装它。 当前的解决方案看起来有些难看: 有什么办法可以使它变得更好? 问题答案: 刚写完问题,就开始考虑使用泛型的效用方法。然后想起了Throwables的一些东西。是的,它已经在那里!) 可能还需要处理UncheckedExecutionException甚至Ex

  • 我正在尝试将一个xml文件保存到Android的内部存储中。但是,该文件没有得到保留。每次我重新启动模拟器时,该文件都会是空的。只有当我在应用程序中手动选择向其写入内容时,该文件才会被写入内容。然后,如果我关闭应用程序或其他什么,文件内容会被保留。但是,当我关闭模拟器时,文件会在那里,但是空的。 因此,我不确定我是否正确地保存了它。 请看看我的代码,也许它有问题,或者它与我的Android模拟器的

  • 如果我们想表示一组允许重复并且保留插入顺序的单个对象,那么我们应该使用List。 这里,插入顺序指的是什么?

  • 问题内容: 我发现这段代码使用了几次(也使用了类似的代码代替)。 为什么在这里检查? 寻找对 男人 ,我发现关于下面的文字,但即使我参观不赐教。 EINTR中断函数调用(POSIX.1);参见signal(7)。 问题答案: 如果在进行系统调用时发生信号,许多系统调用将报告错误代码。实际上没有发生错误,只是因为系统无法自动恢复系统调用,所以才报告这种错误。这种编码模式仅在发生这种情况时重试系统调用