Таблица локальных переменных в стеке JVM - PullRequest
1 голос
/ 02 апреля 2020

Сегодня я компилирую класс в байт-код и ничего не могу найти в индексе таблицы локальных переменных основного метода 0, он начинается с 1, я знаю нестатичный c метод, начинающийся с 1, потому что это «это» в 0.

Вот байт-код.

  // this is the main method
  public static void main(java.lang.String[]);
    Code:
       0: iconst_1
       1: istore_1   // index: 1 (what is content at index 0 ?)
       2: iconst_2
       3: istore_2
       4: return

  // this is a static method
  public static void staticMethod();
    Code:
       0: iconst_1
       1: istore_0  // index: 0 (no 'this')
       2: iconst_2
       3: istore_1
       4: return

  // this is a non-static method
  public void nonStaticMethod();
    Code:
       0: iconst_1
       1: istore_1  // index: 1  (index 0 should be 'this')
       2: iconst_1
       3: istore_2
       4: return

Помогите мне, пожалуйста, спасибо!

1 Ответ

3 голосов
/ 02 апреля 2020

Локальная переменная с индексом 0 в методе main является аргументом метода: ссылка на String[]. Из спецификации JVM:

Виртуальная машина Java использует локальные переменные для передачи параметров при вызове метода. При вызове метода класса любые параметры передаются в последовательных локальных переменных, начиная с локальной переменной 0.

https://docs.oracle.com/javase/specs/jvms/se14/html/jvms-2.html#jvms -2.6.1

...