请考虑以下代码:
import java.io.*;
import java.util.*;
class parent{
private static int static_count;
final void static_display(){
for(int i=0; i< 1000000; i++){
Object obj = new Object();
}
System.out.println("Static method called"+static_count+"times");
}
public void dynamic_display(){
System.out.println("implemented in child");
}
}
class child extends parent{
private static int dynamic_count;
public void dynamic_display(){
for(int i=0; i< 1000000; i++){
Object obj = new Object();
}
System.out.println("dynamic method called"+dynamic_count+"times");
}
}
class sample{
public static void main(String args[]){
parent pnt= new parent();
parent pnt2=new child();
//static binding
long startTime = System.nanoTime();
pnt.static_display();
long elapsedTime = System.nanoTime() - startTime;
System.out.println("Total execution time for static binding in millis: "
+ elapsedTime/1000000);
//dynamic binding
long startTime2 = System.nanoTime();
pnt2.dynamic_display();
long elapsedTime2 = System.nanoTime() - startTime2;
System.out.println("Total execution time for dynamic binding in millis: "
+ elapsedTime2/1000000);
}
}
执行此代码时,我得到以下答案,
Static method called0times
Total execution time for static binding in millis: 11
dynamic method called0times
Total execution time for dynamic binding in millis: 9
只考虑result.i中的执行时间试图找到静态和动态binnded方法执行所花费的时间。但根据我的回答,动态绑定比静态绑定更快。这是可能的。我错了任何地方。
答案 0 :(得分:2)
看起来好像所有测试都以相同的顺序进行运行,静态然后是动态的。 JVM可能已经决定优化您的代码,因为它运行的时间长,是静态测试的一部分。静态测试将获得优化的所有成本,并且有一些好处。动态代码将获益。
这只是您通过这种Java代码微基准测试可以遇到的各种问题的一个例子。
如果您想获得有意义的结果,请选择您正在使用的真实程序并在上下文中进行测试。如果差异太小而无法在实际使用中进行测量,则它太小而不能超过代码清晰度。