Почему attribute_name_index в JVM Classfile является индексом? - PullRequest
0 голосов
/ 07 января 2020

Эта страница https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms -4,7 говорит

Для всех атрибутов attribute_name_index должен быть действительным 16-разрядным индексом без знака в постоянном пуле класса.

Однако мне интересно, если это поле представляет его собственный вид напрямую, лучше, чем текущие спецификации.

(например) Если attribute_name_index == 0x01, то Вид атрибута должен быть зафиксирован как StackMapTable без ссылки на константные пулы.

Каковы преимущества текущих спецификаций?

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Почему атрибут_имя_индекса в JVM Classfile является индексом?

Потому что именно это они и указали. Для лучшего или худшего.

Обратите внимание, что исходный формат файла класса был определен в начале 1990-х годов, задолго до того, как Java был назван Java; см. Почему Java версии файлов классов начинаются с 45? .

В чем преимущества текущей спецификации?

  • Это расширяемое.

  • Компактен; Например, на запись константного пула для одного имени можно ссылаться в нескольких местах в файле класса.

  • Это соответствует.

Но все это спорный вопрос ... если Вы намереваетесь реализовать новый собственный формат файла классов.

0 голосов
/ 07 января 2020
Атрибуты

Java могут содержать практически любую строку в качестве имени. Это расширяемая система. Спецификация JVM определяет несколько десятков стандартных атрибутов, но пользователи также могут определять свои собственные пользовательские атрибуты (эта возможность особенно используется Scala для реализации Scala конкретная c функциональность времени выполнения).

...