动态绑定比静态绑定提供更少的执行时间

时间:2013-01-10 15:56:02

标签: java

请考虑以下代码:

    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方法执行所花费的时间。但根据我的回答,动态绑定比静态绑定更快。这是可能的。我错了任何地方。

1 个答案:

答案 0 :(得分:2)

看起来好像所有测试都以相同的顺序进行运行,静态然后是动态的。 JVM可能已经决定优化您的代码,因为它运行的时间长,是静态测试的一部分。静态测试将获得优化的所有成本,并且有一些好处。动态代码将获益。

这只是您通过这种Java代码微基准测试可以遇到的各种问题的一个例子。

如果您想获得有意义的结果,请选择您正在使用的真实程序并在上下文中进行测试。如果差异太小而无法在实际使用中进行测量,则它太小而不能超过代码清晰度。