В чем разница между байт-кодом iload_1, iload_2, iload_3 и iload #index? - PullRequest
0 голосов
/ 26 июня 2018

Чем iload #index отличается от других трехбайтовых кодов. Есть ли разница в производительности между ними.

Ответы [ 2 ]

0 голосов
/ 13 июля 2018

Когда запускается новый поток, JVM создает новый стек для потока, а когда поток вызывает метод Java, виртуальная машина создает и помещает новый кадр в стек Java потока. Кадр стека состоит из трех частей: локальная переменная, стек операнда, данные кадра .

Локальная переменная организована как массив слов, начинающийся с нуля.

Эти iload_1, iload_2, iload_3 являются начальным уровнем массива локальных переменных . Таким образом, iload_1 означает обращение к первому индексу массива локальных переменных. Аналогично, iload_2 и iload_3 означают ссылку на второй и третий индексы массива локальных переменных соответственно.

Таким образом, нет особых различий между этими iload_1, iload_2 и iload_3, вместо этого они ссылаются на соответствующий индекс в массиве локальных переменных.

0 голосов
/ 26 июня 2018

Чем iload #index отличается от других трехбайтовых кодов.

iload_1 _2 _3 использует один байт байтового кода. Другая форма использует 2.

Есть ли разница в производительности между ними?

Только косвенно. В большинстве случаев это не имеет значения, однако существуют некоторые показатели настройки производительности, основанные на количестве байтов кода. например следует ли встроить метод или нет. Немного более длинный метод может означать, что некоторые оптимизации не выполняются.

например. метрика для встраивания метода, даже если он часто не вызывается, составляет 35 байт. Если код использует iload # вместо iload_1, это может означать, что он имеет длину чуть более 35 байтов, а не немного меньше и не вставляется в строку.

...