Простой вопрос может быть ... Предположим, что класс А содержит два примитивных целого (int), а класс B содержит два класса Wrapper Integer. Какой размер объекта будет больше? A или B?Использование класса Wrapper увеличивает размер объекта?
ответ
Экземпляры этих классов обычно будут одинакового размера. На большинстве 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 кэшируется, он не использует больше места.
@TheLostMind Классы также будут иметь одинаковый размер, но это не вопрос;) –
Как получилось? .. Вы имеете в виду * Объекты класса *? – TheLostMind
И почему размер экземпляров будет * 24 * байта ?. :П. – TheLostMind