Это зависит от реализации.
Ранние реализации JVM были ближе к формату файла класса.В этом случае byte
, short
, char
, int
, float
и ссылки занимают один слот;long
и double
два слота.Итак, эффективно округляем размер до четырех байтов, и это то, сколько памяти занимает объект.Затем общая сумма для объекта, включая заголовок, часто округляется до 8 байтов для лучшего выравнивания памяти.Для «сжатых операций» (32-битные ссылки на 64-битных платформах, где нижние биты 64-битного адреса всегда равны нулю, что позволяет смещать ссылку и использовать более 4 ГБ, сохраняя ссылки до четырех байтов),Сильное давление, чтобы выровнять большие размеры.
Но большую часть десятилетия у нас были 64-битные JVM.Это означает больше потерь, в том числе с точки зрения пропускной способности процессорной памяти.Поэтому в современных реализациях компоновка объекта сжимается так, что объект использует столько памяти, сколько вы ожидаете (плюс округление заголовка и выравнивания).