我做了一些基准测试,比较了 int 与 Integer、long 与 Long、空类实例与具有 long 值的类实例的性能。
我有几个问题我自己无法回答:
- 为什么空类或对象的实例化需要 28 个字节?
- Long 对象的实例化需要 29 个字节,原始 long 8 个字节,那么为什么与空类的差异只有 1 个字节? JVM 在做什么优化?
我在 MacOS 上使用 JDK1.6.0_30,代码可以在 https://github.com/mousator/benchmarks/blob/master/src/sk/emandem/michal/AutoboxingTypeBenchmark.java (你可以 checkout 整个项目)
谢谢解答!
最佳答案
- 我不相信你的内存测量技术。仅调用
runtime.gc()
不一定会执行任何操作。使用类似 MemoryMeasurer 的工具. - 数组会产生自己的开销:通常为 12 个字节;八个用于对象头,四个用于数组长度,然后每个数组条目四个字节用于引用。 (这是在 32 位虚拟机上。)
关于java - 28 个字节用于空对象/类实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369532/