Почему порядковый номер байт-кода не является непрерывным

 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?


person cox    schedule 29.10.2018    source источник
comment
Смещения byte и инструкции имеют разные размеры (см. здесь и здесь).   -  person Holger    schedule 29.10.2018


Ответы (1)


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

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

введите здесь описание изображения

person muradm    schedule 29.10.2018