2015-03-25 3 views

ответ

4

Экземпляры этих классов обычно будут одинакового размера. На большинстве JVM он использует 32-битные ссылки, поэтому ваша оболочка с двумя 32-битными значениями (int или ссылки) будет одинаковой, всего около 24 байтов на 64-битной JVM.

В 64-разрядной JVM размер заголовка по умолчанию составляет 12 байт, ссылки будут 32-битными с Compressed 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 ГБ), то пара обертки int также будет 32 байта.

Если вас беспокоит общее количество потребляемого пространства, а целое не кэшируется, то есть новое целое число, общее пространство может составлять еще 16 байт на целое число. Если Integer кэшируется, он не использует больше места.

+0

@TheLostMind Классы также будут иметь одинаковый размер, но это не вопрос;) –

+0

Как получилось? .. Вы имеете в виду * Объекты класса *? – TheLostMind

+1

И почему размер экземпляров будет * 24 * байта ?. :П. – TheLostMind