Java 空对象/类实例28字节?

Java 空对象/类实例28字节?,java,Java,我做了一些基准测试,比较int和Integer、long和long、空类实例和具有long值的类实例的性能 我有几个问题我自己无法回答: 为什么空类或对象的实例化需要28字节 长对象的实例化需要29个字节,原语长8个字节,那么为什么空类的差异只有1个字节呢?JVM在做什么样的优化 我在MacOS上使用了JDK1.6.0_30,代码在 (您可以签出整个项目) 谢谢你的回答 我不相信你的记忆测量技术。仅仅调用runtime.gc()不一定能做任何事情。使用像这样的工具 数组本身会产生开销:通常为12

我做了一些基准测试,比较int和Integer、long和long、空类实例和具有long值的类实例的性能

我有几个问题我自己无法回答:

  • 为什么空类或对象的实例化需要28字节
  • 长对象的实例化需要29个字节,原语长8个字节,那么为什么空类的差异只有1个字节呢?JVM在做什么样的优化
  • 我在MacOS上使用了JDK1.6.0_30,代码在 (您可以签出整个项目)

    谢谢你的回答

  • 我不相信你的记忆测量技术。仅仅调用
    runtime.gc()
    不一定能做任何事情。使用像这样的工具
  • 数组本身会产生开销:通常为12字节;八个用于对象头,四个用于数组长度,然后每个数组项四个字节用于引用。(这是在32位虚拟机上实现的。)

  • 谢谢你的回答@Louis。我尝试了MemoryMeasurer,对于空类,我得到了20个字节,所以4个字节作为数组指针,16个字节作为例子(尽管16个有点奇怪)。然而,运行时方法很有趣,因为它产生了相当稳定的测量值——迭代重复序列“invoke GC,measure memory,call code,measure memory,invoke GC”,得到相同的值。使用runtime和MemoryMeasurer在度量方面的唯一区别是空类和int包装(都是25B和20B),我按enter键。。接下来的问题是,我能用20或25B来估算OOME吗?嗯。我不会相信的。简单得多,只要试试看就可以了。