Почему «a» является префиксом байт-кода Java для ссылок на объекты?

Инструкции байт-кода Java для конкретных типов имеют односимвольные префиксы для указания типа, к которому относится инструкция.

введите описание изображения здесьВзято с Запись Википедии о байт-коде Java

В каждом случае имеет смысл выбор префикса, состоящего из первой буквы типа (кроме логического, который не имеет префикса инструкции). Префикс ссылки на объект, однако, не кажется логичным, учитывая, что и o, и r (две первые буквы) свободны. Вместо этого в инструкциях ссылки на объект в качестве префикса используется a.

Почему инструкции байт-кода ссылки на объект имеют префикс a, а не более подходящие o или r?


person FThompson    schedule 27.09.2013    source источник
comment
Интересный вопрос, конечно, но своего рода догадка, о чем они думали, вопрос типа, который может не подходить для этого сайта.   -  person Hovercraft Full Of Eels    schedule 27.09.2013
comment
Этот вопрос кажется не по теме, потому что он касается чтения мыслей Java-разработчиков.   -  person Antimony    schedule 27.09.2013
comment
Возможно, для a nchor, как в HTML.   -  person Sotirios Delimanolis    schedule 27.09.2013
comment
@SotiriosDelimanolis Возможно, но как якорь связан со ссылками на объекты?   -  person FThompson    schedule 27.09.2013
comment
Черт возьми, если я знаю... В HTML гиперссылка означает нечто большее. Я думаю, вы могли бы просматривать ссылки, как это.   -  person Sotirios Delimanolis    schedule 27.09.2013


Ответы (2)


Таблица вызывает сомнения. Нет инструкции байт-кода, работающей с boolean, поэтому нет имени инструкции, начинающегося с «z». Буква «z» может исходить от подписи типа, где Z означает boolean, но это не то же самое, что для подписи типа J означает long, а L начинается с имени класса. Так что нет там никакой последовательности. Для инструкций «a» может означать адрес, поскольку инструкции astore также могут хранить адреса возврата в локальной переменной. Возможно, раньше многие из этих… инструкций могли работать с адресами, отличными от объектов, и это было ограничено позже.

person Holger    schedule 27.09.2013
comment
Совершенно верно, я не думал об этом; Я просто вытащил таблицу из Википедии. Мне очень нравится идея, что a означает адрес, поскольку ссылка на объект по существу относится к адресу памяти. - person FThompson; 28.09.2013
comment
Хорошо, что в инструкциях подразумевается буква для ссылок A. - person Peter Lawrey; 12.03.2019

Возможно, это связано с тем, что r относится к типу returnAddress, который используется внутри JVM.

person Eng.Fouad    schedule 27.09.2013
comment
Отличная идея, определенно разумно избегать использования r в пользу returnAddress. - person FThompson; 27.09.2013