Почему число локальных переменных, используемых в методе байт-кода Java, не самое экономичное?

У меня есть фрагмент простого кода Java:

public static void main(String[] args) {
    String testStr = "test";
    String rst = testStr + 1 + "a" + "pig" + 2;
    System.out.println(rst);
}

Скомпилируйте его с помощью компилятора Java Eclipse и изучите байт-код с помощью AsmTools. Он показывает:

byte code

В методе есть три локальные переменные. Аргумент находится в слоте 0, а слоты 1 и 2 предположительно используются кодом. Но я думаю, что достаточно двух локальных переменных - индекс 0 в любом случае является аргументом, а коду нужна только еще одна переменная.

Чтобы проверить, верна ли моя идея, я отредактировал текстовый байт-код, уменьшил количество локальных переменных до 2 и скорректировал некоторые соответствующие инструкции:

edited

Я перекомпилировал его с AsmTools, и он отлично работает!

Так почему же Javac или компилятор Eclipse не проводят такого рода оптимизацию для использования минимальных локальных переменных?

30
задан Ageax 29 July 2019 в 16:11
поделиться