2015-02-27 2 views
3

Глядя на выходе работает javap на некоторых классах, я наткнулся на следующую странность:JVM Constant Pool Записи

Константа бассейн некоторых классов содержит такие элементы, как

#33 = Utf8    Code 
#34 = Utf8    LocalVariableTable 
#35 = Utf8    StackMapTable 
#36 = Utf8    MethodParameters 

Почему эти константы появляются в постоянном пуле?

+1

Эти константы используются везде? Подсказка Подсказка? –

+0

Это имена различных атрибутов, таких как 'LocalVariableTable', но я не понимаю, почему они должны быть строками UTF-8 вместо простых числовых идентификаторов. – Clashsoft

+0

Вы имеете в виду '34'? Использование названных полей упрощает расширение и понимание формата. –

ответ

2

следующие константы

#33 = Utf8    Code 
#34 = Utf8    LocalVariableTable 
#35 = Utf8    StackMapTable 
#36 = Utf8    MethodParameters 

являются имя attributes.

Для всех атрибутов атрибут_имя_индекс должен быть допустимым 16-разрядным индексом без знака в пул констант класса. Константа_имя_в_и_и_и_и_и_и_и_и_и_ должна быть структурой CONSTANT_Utf8_info (§4.4.7), представляющей имя атрибута.

Атрибуты вы упоминаете имеют следующие функции:

  • Атрибут Code содержит инструкции Java Virtual Machine и вспомогательной информации для метода, в том числе метод инициализации экземпляра или метода класса или инициализации интерфейса ,
  • Атрибут LocalVariableTable [...] может использоваться отладчиками для определения значения данной локальной переменной во время выполнения метода.
  • Атрибут StackMapTable используется в процессе проверки по типу проверки
  • Атрибут MethodParameters записывает информацию о формальных параметрах методы, например, их имена.
Смежные вопросы