使用 Wrapper class 会增加对象的大小?

Use of Wrapper class increases size of object?

简单的问题可能是.. 假设我有 class A 包含两个原始整数 (int) 和 class B 包含两个 Wrapper class Integer。 哪个物体的尺寸会更大? A 还是 B?

这些 类 的实例通常大小相同。在大多数 JVM 上,它使用 32 位引用,因此具有两个 32 位值(int 或引用)的包装器将是相同的,在 64 位 JVM 上总共大约 24 个字节。

在 64 位 JVM 中,默认 header 大小为 12 字节,引用将是 32 位压缩 Oops,8 字节对齐的总大小为 24 字节。

Header - 12 bytes with 64-bit class references
int or ref - 4 bytes
int or ref - 4 bytes
align to multiple of 8 - +4 bytes
==========
Total - 24 bytes

如果引用是 64 位的(例如 > 64 GB 堆),每个引用将使用 8 个字节,总大小为 32 个字节。但是,如果对齐也是 16(对于 32 - 64 GB 之间的堆),那么 int 包装器对也将是 32 字节。

如果您担心消耗的总量 space,并且整数未缓存,即是一个新整数,则总量 space 可以是每个整数另外 16 个字节。如果 Integer 被缓存,它不再使用 space.