6

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

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

  1. 为什么实例化空类或对象需要 28 个字节?
  2. Long 对象的实例化需要 29 个字节,原始 long 8 个字节,那么为什么与空类的差异只有 1 个字节?JVM做了什么样的优化?

我在 MacOS 上使用了 JDK1.6.0_30,代码可在 https://github.com/mousator/benchmarks/blob/master/src/sk/emandem/michal/AutoboxingTypeBenchmark.java获得 (您可以查看整个项目)

感谢您的回答!

4

1 回答 1

2
  1. 我不会相信你的记忆测量技术。只是打电话runtime.gc()并不一定会做任何事情。使用MemoryMeasurer 之类的工具。
  2. 数组会产生自己的开销:通常大约为 12 个字节;八个用于对象头,四个用于数组长度,然后每个数组条目四个字节用于引用。(这是在 32 位 VM 上。)
于 2012-04-29T03:56:59.463 回答