我听说过这个情况,但我无法找到一个明确的在线来源来证实它。
背景:一位同事喜欢将他的本地变量设为final。做这样的事情的原因之一是性能。我的观点是Java的HotSpot JIT编译器会自动检测不变的本地变量,并使它们成为final,所以我们自己这样做没有任何性能上的好处。
请注意,我不是在询问将局部变量设为
你认为在这种情况下,由于
背景:一位同事喜欢将他的本地变量设为final。做这样的事情的原因之一是性能。我的观点是Java的HotSpot JIT编译器会自动检测不变的本地变量,并使它们成为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
呢?
类似问题
- 在循环中将本地变量声明为final
- 与此相同的问题,但是通过查看类文件进行实证(没有文档参考)来得出答案
- javac或Hotspot是否会自动将“final”添加为不变变量的优化?
- 针对实例变量的相同问题
- Java中的内联
- 针对方法的相同问题
- 在Java中使用final关键字是否会改善性能?
- 类似的问题,对于本地变量没有共识