Почему порядковый номер байт-кода не является непрерывным - PullRequest
0 голосов
/ 29 октября 2018
 static void heapVar();
Code:
   0: iconst_3
   1: newarray       int
   3: dup
   4: iconst_0
   5: bipush        100
   7: iastore
   8: dup
   9: iconst_1
  10: sipush        200
  13: iastore
  14: dup
  15: iconst_2
  16: sipush        300
  19: iastore
  20: astore_0
  21: return

Байт-коды указаны выше, почему цифры слева являются 0 1 3 4 5 7 ..., а не непрерывными, как 0 1 2 3 4 5 6 7 ..., Означает ли что-то отсутствие 2 и 6?

1 Ответ

0 голосов
/ 29 октября 2018

Это не последовательность, а смещение. Так что зависит от физического размера операции в байтах, например, 2, 3, 4 байта длины, тогда следующий будет начинаться с этого смещения. Например, newarray int кажется занимает 2 байта, поэтому dup начинается с 3 и т. Д.

Вот статья, объясняющая формат вывода .

enter image description here

...