什么是java.lang.Integer保留大小



我正在使用Java Hotspot 1.8.0_191-b12(64位,Xmx<32 GB),我正在寻找带有各种工具的jmap转储(hprof格式)。

VisualVM(和基于 NetBeans 探查器的工具)报告与 Yourkit 和 Eclipse Memory Analyzer 有很大不同。

我看了最简单的物体,甚至那些不同的......对于java.lang.Integer,VisualVm报告20个字节,而不是其他的16个字节(在我的解释中,这是因为= 12字节的标头+ 4字节int 'value'从Integer类= 16归档,不需要填充)。

哪一个是正确的,为什么?

唯一正确的工具是JOL,所有其他工具可能都不准确。

报告16 bytes:标题为 12 + int本身为 4(所以你是对的)。

  Integer i = 42;
  System.out.println(ClassLayout.parseInstance(i).toPrintable());

我把它留给你运行这段代码并自己查看输出。请注意,如果禁用UseCompressedOops它可能会更多;在这种情况下,将有一个额外的4 bytes + 额外的填充4 bytes

相关内容

  • 没有找到相关文章

最新更新