我做了一些基准测试,比较了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
    (您可以 check out 整个项目)

    感谢您的回答!

    最佳答案

  • 我不会相信您的内存测量技术。仅调用runtime.gc()并不一定会做任何事情。使用MemoryMeasurer之类的工具。
  • 数组会产生自身的开销:通常为12个字节;八个用于对象 header ,四个用于数组长度,然后每个数组条目四个字节作为引用。 (在32位VM上。)
  • 关于java - 空对象/类实例的28个字节?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10369532/

    10-10 06:15