2013-01-10 180 views
-2

考虑下面的代码较小的执行时间:动态绑定提供了比静态绑定

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

+3

这种基准是没有意义的。 –

+0

你的方法可以使用改进。先打电话给他们几百次,然后放弃时间。然后按顺序交替调用它们:一个不是1000000,另一个是1000000;但100万(第一个,然后是其他)。 – CPerkins

+0

尝试以相反的顺序调用它们,您可能会获得“精彩”结果。 – Vic

回答

2

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

这只是这种类型的Java代码的微基准测试可能遇到的各种问题的一个例子。

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