-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

結果の実行時間のみを考慮してください。静的および動的にバインドされたメソッドの実行にかかる時間を見つけようとしましたが、私の答えによると、動的バインディングは静的バインディングよりも高速です。

4

1 に答える 1

2

すべてのテストが同じ順序で実行されているかのように見えます。静的、次に動的です。JVM は、静的テストの途中で実行に時間がかかるため、コードを最適化することを決定した可能性があります。静的テストは、最適化のすべてのコストといくつかの利点を得ることができます。動的コードにはメリットがあります。

これは、この種の Java コードのマイクロ ベンチマークで発生する可能性のある問題のほんの一例です。

意味のある結果が必要な場合は、作業している実際のプログラムを使用して、コンテキストでテストしてください。違いが小さすぎて実際の使用で測定できない場合は、小さすぎてコードの明瞭さを上回ることはできません。

于 2013-01-10T16:00:57.673 に答える