Apache Software Foundation Thinking in Java:使用final方法的第二个原因是效率

引论 :
使用final方法的原因有两个。第一个原因是把方法锁定,以预防任何继承类修改它的意义。这是出于设计的考虑:你想要确保在继承中方法行为保持不变,并且不会被重载。使用final方法的第二个原因是效率。如果你将一个方法指明为final,就是同意编译器将针对该方法的所有调用都转为内嵌(inline)调用。当编译器发现一个final方法调用命令时,它会根据自己的谨慎判断,跳过插入程序代码的正常方式而执行方法调用机制(将参数压入栈,跳至方法代码处并执行,然后跳回并清除栈中的参数,处理返回值。),并且以方法体中的实际代码的复本来替代方法调用。这将消除方法调用的开销。当然,如果一个方法很大,你的程序代码就会膨胀,你可能看不到内嵌带来的任何性能提高,因此,你所取得的性能提高会因为花费于方法内的时间总量而被缩减。这意味着Java编译器能够观察到这些情况并明智地抉择是否对final方法执行内嵌动作。然而,最好是让编译器和JVM仅在你明确表示要阻止重载时,再处理效率事项,并将方法指明为final。

提问:
1个线程和 1个线程的同步代码,哪个更容易写?
你是如何调用 wait()方法的?使用 if 块还是循环?为什么?
有经验程序员的 Java 面试题
什么是 Busy spin?我们为什么要使用它?
Java 中怎么获取一份线程 dump 文件?
Swing 是线程安全的?
什么是线程局部变量?
用 wait-notify 写一段代码来解决生产者-消费者问题?
用 Java 写一个线程安全的单例模式(Singleton)?
Java 中 sleep 方法和 wait 方法的区别?
什么是不可变对象(immutable object)?Java 中怎么创建一
个不可变对象?
我们能创建一个包含可变对象的不可变对象吗?
数据类型和 Java 基础面试问题
Java 中应该使用什么数据类型来代表价格?
怎么将 byte 转换为 String?
Java 中怎样将 bytes 转换为 long 类型?
我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于
byte 类型的范围,将会出现什么现象?
存在两个类,B 继承 A,C 继承 B,我们能将 B 转换为 C 么?
如 C = © B;
哪个类包含 clone 方法?是 Cloneable 还是 Object?
Java 中 ++ 操作符是线程安全的吗?
在这里插入图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页