"поддельные" записи в выводе локальной таблицы javap - PullRequest
5 голосов
/ 29 октября 2011

Я использовал javap для изучения кода, созданного для одного из моих классов, и заметил следующий вывод:

...
frame_type = 255 /* full_frame */
  offset_delta = 11
  locals = [ class Test, double, int, double, double, bogus, bogus, int, int, class "[D" ]
  stack = []
...

Каково значение этих «поддельных» записей типа / переменной в locals стол?Как они вызваны?Как они влияют на полученный код?

Файл класса был создан с использованием компилятора Eclipse 3.7, а javap взят из OpenJDK-1.6b22.

1 Ответ

2 голосов
/ 10 февраля 2012

Я натолкнулся на этот маленький драгоценный камень , просматривая документацию Javassist :

BOGUS

public static final Тип BOGUS

Представляет недоступное значение.Код не может получить доступ к значению, которое представляет этот тип.Это происходит, когда байт-код повторно использует позицию таблицы локальных переменных с не-сливаемыми типами.Примером может служить скомпилированный код, который использует одну и ту же позицию для примитивного типа в одной ветви, и ссылочный тип в другой ветви.

Я предполагаю, что именно эта неоднозначность является причиной "поддельных" записей вlocals стол также ...

...