Ответ
Размер пустого объекта new Object() в куче (heap) зависит от разрядности JVM и настроек.
На 64-битной JVM с включенным сжатием ссылок (-XX:+UseCompressedOops, значение по умолчанию):
- Заголовок объекта: 12 байт.
- Mark Word: 8 байт (хранит хэшкод, информацию о блокировке и сборке мусора).
- Klass Pointer: 4 байта (сжатая ссылка на метаданные класса).
- Выравнивание (padding): 4 байта (для кратности 8).
- ИТОГО: 16 байт.
На 64-битной JVM без сжатия ссылок (-XX:-UseCompressedOops):
- Заголовок объекта: 16 байт (8 байт Mark Word + 8 байт Klass Pointer).
- Выравнивание: 0 байт (размер уже кратен 8).
- ИТОГО: 16 байт.
Практическое измерение с помощью JOL (Java Object Layout):
// Добавь зависимость org.openjdk.jol:jol-core
import org.openjdk.jol.info.ClassLayout;
public class ObjectSize {
public static void main(String[] args) {
System.out.println(ClassLayout.parseInstance(new Object()).toPrintable());
}
}
// Вывод покажет точную структуру и размер.
Важно: Размер может незначительно варьироваться в разных JVM и зависит от состояния объекта (например, наличие блокировки).