Я слышал, что это так, но не смог найти точного источника в Интернете, чтобы это подтвердить.
Предыстория: коллега любит делать свои локальные переменные final
. Одна из причин этого - производительность. Я утверждаю, что компилятор Java HotSpot Just In Time автоматически обнаруживает инвариантные локальные переменные и делает их final
, поэтому делать это самим не дает никакого преимущества с точки зрения производительности.
Обратите внимание, что я не спрашиваю, является ли создание локальных переменных final
хорошей практикой кодирования, потому что по этому поводу уже есть много (не по теме) SO-вопросов.
РЕДАКТИРОВАТЬ: mrhobo хорошо замечает оптимизацию байт-кода для целочисленных литералов. Я должен был привести пример кода, о котором я говорил, с моим вопросом:
Object doSomething(Foo foo) {
if (foo == null) {
return null;
}
final Bar bar = foo.getBar();
final Baz baz = this.bazMap.get(bar);
return new MyObject(bar, baz);
}
Как вы думаете, в этом сценарии происходит такая же оптимизация, потому что bar
и baz
оба отмечены final
? Или HotSpot автоматически определяет, что они не меняются в рамках метода, и в любом случае рассматривает их как final
?
Похожие вопросы
- Declaring local variable as final in a loop
- same question, but derives the answer empirically (by looking at classfiles), with no documentation reference
- Do javac or Hotspot automatically add 'final' as an optimisation of invariant variables?
- same question for instance variables
- Inlining in Java
- same question for methods
- Does use of final keyword in Java improve the performance?
- similar question, with no consensus for local variables
final int i = 1;
, у вас будет значок, соответствующий1
. Если вы напишетеint i = 1;
, вы получите то же самое. - person assylias   schedule 07.03.2014