Короткий ответ: не беспокойтесь об этом!
Длинный ответ:
Говоря о конечных локальных переменных , имейте в виду, что использование ключевого слова final
поможет компилятору оптимизировать код статически , что в конечном итоге может привести к более быстрому коду. Например, окончательные строки a + b
в приведенном ниже примере объединены статически (во время компиляции).
public class FinalTest {
public static final int N_ITERATIONS = 1000000;
public static String testFinal() {
final String a = "a";
final String b = "b";
return a + b;
}
public static String testNonFinal() {
String a = "a";
String b = "b";
return a + b;
}
public static void main(String[] args) {
long tStart, tElapsed;
tStart = System.currentTimeMillis();
for (int i = 0; i < N_ITERATIONS; i++)
testFinal();
tElapsed = System.currentTimeMillis() - tStart;
System.out.println("Method with finals took " + tElapsed + " ms");
tStart = System.currentTimeMillis();
for (int i = 0; i < N_ITERATIONS; i++)
testNonFinal();
tElapsed = System.currentTimeMillis() - tStart;
System.out.println("Method without finals took " + tElapsed + " ms");
}
}
Результат?
Method with finals took 5 ms
Method without finals took 273 ms
Протестировано на Java Hotspot VM 1.7.0_45-b18.
Итак, насколько реальное улучшение производительности? Я не смею сказать. В большинстве случаев, вероятно, маргинальные (~ 270 наносекунд в этом синтетическом тесте, потому что конкатенация строк вообще исключена - редкий случай), но в высоко оптимизированном коде полезности может быть фактором. В любом случае ответ на исходный вопрос: да, это может улучшить производительность, но в лучшем случае в лучшем случае .
Времени компиляции вовремя, я не мог найти никаких доказательств того, что использование ключевого слова final
оказывает какое-либо измеримое влияние на производительность.