Хотя на многих виртуальных машинах размер ссылки равен собственному размеру указателя (т. Е. 32 бита для 32-битной JVM и 64-битной для 64-битной JVM), это не гарантируется - и, в частности, HotSpot делает это сейчас или скоро будет поддерживать "Compressed Oops" , которые являются 32-битными ссылками в 64-битной JVM. (Это не означает, что каждая ссылка сжата - прочитайте связанную статью для получения дополнительной информации, и об этом также есть много постов в блоге.)
В ответ на другой комментарий обратите внимание, что сама ссылка, как правило, является просто способом обращения к самому объекту. Является ли это прямым указателем памяти или нет, его цель - получить данные для объекта. Это в основном все, что действительно имеет значение. Если есть некоторые «запасные» биты (например, это 64-битная ссылка, и вам не нужна вся эта ширина только для представления местоположения объекта), то виртуальная машина может использовать эти данные для другой информации, такой как ее тип, что может позволить некоторые оптимизации. (См. Комментарий Тома для более подробной информации.)
Сам объект содержит информацию о типе (вероятно, в форме ссылки на экземпляр Class
или что-то подобное - я не знаю достаточно подробно), а также другие необходимые «вещи» в заголовке, прежде чем вы получите пользовательские данные для объекта.