对被final关键字修饰的方法执行效率的一段测试
首先回顾一下final关键字的作用:
1、final类:
可以用“final”声明一个类不可再被作为超类。
2、final方法:
当一个方法用“final”来修饰时,表示该方法不可以被子类重写。
好处:
一、限制了子类中对其改写;
二、提高了执行的效率,因为这种情况属于静态绑定,Java虚拟机(JVM)的即时编译器就不会去检索该方法在其父类、子类或爷爷类、孙子类等有内联关系的类中是否存在重写,省去了动态判断究竟要执行哪一个类(具体内联关系的类)的这个名称的方法。
3、final属性:
对于成员变量和变量,也可以用“final”来修饰,表示是一个不可被修改的常量。
注意:一个方法如果需要被构造函数所调用,那么方法最好声明为“final”;否则,如果子类重写了这个方法,就可能引起意外的风险,应避免多态性的发生。
特别是第2点,我一直都感到疑惑的一点是final方法的第二点好处,究竟能够提高多少的执行效率?能在时间上节约多少?
于是,我写了一段测试代码:
以下是几组测试结果:
调用不带final关键字的Method1方法耗时(ms毫秒):80
---------------------------------------------------
调用带final关键字的Method2方法耗时(ms毫秒):57
调用不带final关键字的Method1方法耗时(ms毫秒):81
---------------------------------------------------
调用带final关键字的Method2方法耗时(ms毫秒):55
调用不带final关键字的Method1方法耗时(ms毫秒):79
---------------------------------------------------
调用带final关键字的Method2方法耗时(ms毫秒):58
调用不带final关键字的Method1方法耗时(ms毫秒):85
---------------------------------------------------
调用带final关键字的Method2方法耗时(ms毫秒):63
呵呵!原来还真是这么回事。这四组测试结果的平均节省耗时为23毫秒,如果方法的逻辑比较复杂,再加上网络传输等因素,省下的时间还是比较可观的。
以上仅为我的一个小测试,对final方法的提高执行效率一说算是有了个见证。
By CodingMouse
2009.5.5