final修饰可以在一定程度上提升代码的执行性能,为什么呢?
问题描述:
在3-3的课中,老师说到“通过final修饰可以在一定程度上提升代码的执行性能,但是也相应的降低了代码的灵活性。” 问题比较多,见谅。
请问final是如何提升代码执行性能的?
final修饰类能提升性能吗?为什么?有什么例子呢?
final修饰方法能提升性能吗?为什么?有什么例子呢?
final修饰成员变量能提升性能吗?为什么?有什么例子呢?
final修饰方法内局部变量能提升性能吗?为什么?有什么例子呢?
尝试过的解决方式:
我查找了一些网络说法,但不知道是否正确,也没有办法去很好的验证。
1.知乎上的回答https://zhuanlan.zhihu.com/p/63816871
带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。 此举能够使性能平均提高50% 。
(能有50%这么多?)
我的这里理解是,final对类和方法修饰,能提升运行效率。但不知道这些话的可信度。这里的解释正确吗?
2. CSDN https://blog.csdn.net/eclipser1987/article/details/7336558
文章说明如下:(也不知道可不可信)
于是我找到这种提升性能的2种解释:
其一:
final方法:
当一个方法用“final”来修饰时,表示该方法不可以被子类重写。
使用final方法的原因有二:
一、限制了子类中对其改写;
二、提高了执行的效率,因为这种情况属于静态绑定,Java虚拟机(JVM)的即时编译器就不会去检索该方法在其父类、子类或爷爷类、孙子类等有内联关系的类中是否存在重写,省去了动态判断究竟要执行哪一个类(具体内联关系的类)的这个名称的方法。
其二:
final方法 如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
3. stackoverflow https://stackoverflow.com/questions/4279420/does-use-of-final-keyword-in-java-improve-the-performance
这里面有几个说final修饰成员变量是能提供效率的,比如string concatenation的时候会更快,还有就是在涉及到conditional compilation的时候,但是评论里面说这个测试并不能代表正常使用时final对性能的提升。多数人都说final对性能的提升没有太大意义,final主要是在design和readability上有用。 也有评论引述了IBM的说法,说final修饰classes 和method对性能没有提升,但是final修饰fields是有性能提升的。 我看的迷糊了,也不知道到底是什么结论。
题外话:他们能显示java的produces 这个是怎么做的?我搜索了bipush这些代码,发现是编译的bytecode,如何像这样看到java执行bytecode的顺序呢?

正在回答
同学你好,1、带有 final 修饰符的类是不可派生的。在 Java 核心 API 中,有许多应用 final 的例子,例如: java.lang.String,整个类都是 final 的。为类指定 final 修饰符可以让类不可以被继承,为方法指定 final 修饰符可以让方法不可以被重写。如果指定了一个类为 final,则该类所有的方法都是 final 的。Java 编译器会寻找机会内联所有的 final 方法,通过内联提升 Java 运行效率。
2、这边老师也不清楚具体是怎么执行的。
祝学习愉快!
- 参与学习 人
- 提交作业 8790 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星