【问题标题】:What is the java.lang.Integer retained size?java.lang.Integer 保留的大小是多少?
【发布时间】:2019-01-14 14:00:00
【问题描述】:

我正在使用 Java Hotspot 1.8.0_191-b12(64 位,Xmx

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

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

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

【问题讨论】:

  • 你是对的。可能提到的应该是-128 到 127 或可配置更高的valueOf 缓存。

标签: java visualvm jvisualvm yourkit memory-footprint


【解决方案1】:

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

并且报告 16 bytes : 12 表示标题 + 4 表示 int 本身(所以你是正确的)。

  Integer i = 42;

  System.out.println(ClassLayout.parseInstance(i).toPrintable());

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

【讨论】:

    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2012-06-30
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    相关资源
    最近更新 更多