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

时间:2015-03-25 09:14:43

标签: java oop wrapper

简单的问题可能是...... 假设我有A类包含两个原始整数(int),而B类包含两个Wrapper类Integer。 哪个对象的大小会更大? A或B?

1 个答案:

答案 0 :(得分:5)

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

在64位JVM中,默认头大小为12个字节,引用将为32位压缩哎呀,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个字节。

如果您担心消耗的总空间,并且没有缓存整数,即是一个新的整数,则每个整数的总空间可以是16个字节。如果整数被缓存,则它不会再使用空格。