【发布时间】:2017-01-28 17:09:41
【问题描述】:
我的老师说我们可以使用final来提高效率。我试过做测试,但发现添加final方法修饰符实际上会降低效率。
我的测试是这样的:
ClassTest1:
public class ClassTest1 {
public final String getName() {
return name;
}
public final void setName(String name) {
this.name = name;
}
private String name;
}
ClassTest2:
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 方法花费更多时间?
【问题讨论】:
-
将final关键字添加到方法的签名中可以防止它在任何子类中被覆盖,效率与此绝对无关。
-
final不能让事情变慢。它通常也不会让事情变得更快 - 在大多数情况下,当某些事情有效地final时,编译器可以解决。final用于使代码更可读。 -
您没有添加 jvm 预热,因此将测试更改为以 final 作为第二个执行版本应该会改变结果
-
@Sarly 查看其他 cmets;您的基准测试存在根本缺陷。
-
@k5_,你能告诉我如何添加 jvm 预热吗?我听不懂你在说什么。
标签: java