У меня есть фрагмент простого кода Java:
public static void main(String[] args) {
String testStr = "test";
String rst = testStr + 1 + "a" + "pig" + 2;
System.out.println(rst);
}
Скомпилируйте его с помощью компилятора Java Eclipse и проверьте байт-код с помощью AsmTools. Это показывает:
В методе есть три локальные переменные. Аргумент находится в слоте 0, а слоты 1 и 2 предположительно используются кодом. Но я думаю, что достаточно двух локальных переменных - индекс 0 в любом случае является аргументом, а коду нужна только еще одна переменная.
Чтобы проверить, верна ли моя идея, я отредактировал текстовый байт-код, уменьшил количество локальных переменных до 2 и скорректировал некоторые соответствующие инструкции:
Я перекомпилировал его с AsmTools, и он отлично работает!
Так почему же Javac или компилятор Eclipse не проводят такую оптимизацию для использования минимальных локальных переменных?