Как правило, вам не нужно знать, когда и где хранится ссылка. Память не просто двухуровневая, она намного сложнее. Сверху вниз у вас есть.
registers
L1 cache
L2 cache
L3 cache
local main memory
nonlocal main memory
swap space.
локальная основная память - это память, локальная для вашего процессора. Вы можете иметь локальную память для другого процессора. Так выполнить
B b = new B();
Он должен выделять некоторую память, которая обычно поступает из TLAB (локального буфера выделения потока). Это пространство памяти обычно находится где-то между L1 и локальной основной памятью. Там могут быть копии на всех уровнях. Однако ссылка должна быть в регистре, чтобы ее можно было присвоить локальной переменной. Он может быть сохранен в стеке и в памяти, а может и нет.
Даже внутри процессора «регистры» - это широкая категория. То, как процессор обращается к памяти и записывает ее в память, может быть удивительно сложной темой, поскольку может сильно повлиять на производительность.