Если я создаю "new Object ()", ссылка на этот объект будет в стеке, который будет 8 байтов на 64-битной.
Скорее всего, это будет 4 байта даже для 64-битной JVM.Oracle / OpenJDK поддерживают CompressesOops, которые используют 4 байта для ссылок.
Затем вопрос был в том, что находится в куче.
Заголовок объекта.У него нет полей.
Позднее интервьюер упомянул, что в куче всегда будут выделяться две вещи: объект "Класс"
A Class
объект являетсяпрокси для информации, хранящейся в куче.Он не должен существовать, даже если экземпляры класса существуют (хотя для Object это, вероятно, уже существует)
, а также «Monitor».
Опять же,монитор создается только в том случае, если он используется, т.е. synchornized
Может кто-нибудь объяснить, пожалуйста, немного больше о том, сколько памяти / что выделяется при создании "new Object ()"?
В 64-битной JVM заголовок по умолчанию составляет 12 байтов, однако при выравнивании объектов он будет использовать 16 байтов.В 32-разрядной JVM это будет всего 8 байтов.
В 32-разрядной JVM и 64-разрядной JVM с CompressedOops ссылка составляет всего 4 байта (что является большинством JVM)