简单的问题可能是..假设我有A类包含两个原始整数(int),而B类包含两个Wrapper类Integer.哪个对象的大小会更大?A还是B?
这些类的实例通常具有相同的大小.在大多数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
Run Code Online (Sandbox Code Playgroud)
如果引用是64位(例如> 64 GB堆),则每个引用将使用8个字节,总大小将为32个字节.但是,如果对齐也是16(对于32 - 64 GB之间的堆),那么这对int包装器也将是32个字节.
如果您担心消耗的总空间,并且没有缓存整数,即是一个新的整数,则每个整数的总空间可以是16个字节.如果缓存整数,则不再使用空格.