Что касается байт-кода, ссылка ведет себя почти так же, как int
или float
. long
и double
занимают два слота стека. Так что, как если бы ссылки были четыре байта. Тем не менее, 64-разрядные системы часто используют эту возможность, чтобы использовать 64-разрядные указатели.
Некоторые JVM (я считаю, что BEA JRockit в течение некоторого времени и недавно добавлен в Sun) используют «сжатые операции», которые являются 32-разрядными, которые сдвигаются влево на несколько мест, чтобы обеспечить доступ к десяткам ГБ памяти в 64-разрядных системах. Наряду с уменьшением потребления памяти, уменьшение эталонного размера также снижает пропускную способность памяти процессора и требования к кэш-памяти, улучшая производительность, несмотря на дополнительные трудности.
Я полагаю, что версия Hotspot от Azul использует 64-битные ссылки, 48-битные для адреса и 16-битную информацию о типе.