Ответ
Размер пустого объекта 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 и зависит от состояния объекта (например, наличие блокировки).
Ответ 18+ 🔞
А, ну это классика, блядь! Сидишь ты такой, пишешь на Java, думаешь — ну new Object(), он же пустой, наверное, весит нихуя. Ан нет, сука! Он там внутри себя столько всякой хуйни таскает, что диву даёшься.
Смотри, как оно работает, ёпта. Всё зависит от того, на какой JVM ты это дело запускаешь, и как она настроена. Это ж как с тачками — одна на бензине, другая на солярке, а третья, блядь, на кривом ракетостроении.
Если у тебя 64-битная виртуалка, и она нормальная (то есть сжатие ссылок включено, а оно по умолчанию вкл), то:
- Заголовок объекта (это его паспорт, ёбта): 12 байт.
- Mark Word (8 байт): Тут у него и хэшкод лежит, и инфу о блокировках, и для сборщика мусора пометки. В общем, вся его личная жизнь.
- Klass Pointer (4 байта): Сжатая ссылочка на описание класса. Типа, справка, кто он такой.
- Выравнивание (padding): Ещё 4 байта накинут, чтобы размер до 16 байт довести. Компьютеры, блядь, любят, когда всё по ровненькой, кратно восьми. Без этого им не комильфо.
- В СУММЕ: 16 байт. Овердохуища для пустоты, да?
А если ты маньяк и отключил сжатие ссылок (-XX:-UseCompressedOops), то:
- Заголовок: Уже 16 байт (8 + 8).
- Выравнивание: Ноль, потому что и так уже 16 — красивое число.
- В СУММЕ: Всё те же 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());
}
}
// Запустишь — и тебе выведет всю подноготную: что, где и сколько байт занимает.
Только учти, блядь, размер — он не всегда константа. Если объект заблокирован, там в том же Mark Word'е информация другая запишется. Так что, в рот меня чих-пых, мелочь, а приятно знать!