gpt4 book ai didi

java - 为什么添加final方法修饰符会降低代码效率?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:31 26 4
gpt4 key购买 nike

我的老师说我们可以使用final来提高效率。我尝试做了测试,但我发现添加final方法修饰符实际上会降低效率。

我的测试是这样的:

类测试1:

public class ClassTest1 {
public final String getName() {
return name;
}
public final void setName(String name) {
this.name = name;
}
private String name;
}

类测试2:

public class ClassTest2 {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
}

主要测试方法:

public static void main(String[] args) {
ClassTest1 ct1=new ClassTest1();
ClassTest2 ct2=new ClassTest2();
Long t1=System.currentTimeMillis();
for (int i = 0; i <1000000 ; i++) {
ct1.getName();
}
Long t2=System.currentTimeMillis();
for (int i = 0; i <1000000 ; i++) {
ct2.getName();
}
Long t3=System.currentTimeMillis();
System.out.println("add final decorate cost time:"+(t2-t1));
System.out.println("not add final decorate cost time:"+(t3-t2));
}

为什么添加 final 比不添加 final 方法花费更多的时间?

最佳答案

这里有两个方面:

  • 衡量 Java 性能困难,请参阅 here .很可能,您的数字根本就不是合理的
  • 正如评论所说:final 方法只影响是否它们可以被覆盖。从理论上讲,这可以影响运行时性能。当 JIT 编译器知道一个方法不能被覆盖时,它可以决定直接内联方法体,而不需要任何额外的检查。当方法不是 final 时,执行基方法的内联主体可能是错误的,因此在执行之前需要进行某种检查。

归结为:如果有的话,使用该关键字有助于避免在调用方法时在运行时进行单次检查。从这个意义上说,我们可能正在谈论纳秒的 yield 。

所以,是的,运行时性能有一个理论上的方面,但 final 的真正用途是向人类读者传达意图 .

关于java - 为什么添加final方法修饰符会降低代码效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41912487/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com