Я использую «javap -verbose», чтобы разобрать файл класса и найти постоянный пул, потерянный # 3, кто-нибудь может сказать мне причину?постоянный пул потерял # 3 в файле класса
ответ
долготы и парной занимают два слота в постоянном пуле, так что слот после них пропускается. В этом случае слот 2 содержит длинный, поэтому слот 3 пропускается.
Обратите внимание, что предыдущий элемент имеет тип Long
и its documentation говорит:
Все константы 8 байт занять до двух записей в таблице
constant_pool
файлаclass
. Если структураилиCONSTANT_Double_info
является товаром в таблицеconstant_pool
по индексу n, то следующий полезный товар в пуле расположен по индексу n +2. Индексconstant_pool
n +1 должен быть действительным, но считается непригодным.
и аккуратное дополнение
В ретроспективе, что делает константу 8-байтовую взять две постоянные записи пула была плохим выбором.
Так javap
решил просто пропустить непригодную запись вместо печати что-то вроде «#3 unusable
» ...