Объекты, за исключением особых обстоятельств, таких как escape-анализ , размещаются в куче.
Когда вы создаете ссылку на другой объект, она может быть назначена локальной переменной (хранящейся в стеке) или полю экземпляра / класса, и в этом случае она сохраняется внутри объекта, содержащего ссылку.
Ссылка указывает на какое-то место в куче и автоматически разыменовывается средой выполнения Java. Из чистого Java у вас нет доступа к необработанным указателям или простому способу проверки размера объекта.
Фактические данные / структура, которые хранятся в куче, начинаются с того, что обычно называется заголовок объекта . Заголовок содержит (сжатый) указатель класса, ведущий к внутренней структуре данных, определяющей макет класса (хранится в отдельной области памяти под названием Metaspace - или в пространстве сжатых классов, если используются сжатые ООП).
Указатель может быть 4 или 8 байтов, в зависимости от архитектуры - даже в 64-битных системах это обычно 4 байта из-за комбинированных ООП оптимизации.
Вы можете использовать jol tool для печати макета объекта.
Наконец, этот пост от Алексея Шипилева содержит гораздо больше деталей о Java макете объекта: https://shipilev.net/jvm/objects-inside-out/