3

私は、私のJavaプログラム/プログラムの部品の速度を穏やかにする合理的な機会を見つけようとしています。 2つのメソッドのどちらが高速に実行されるかをテストします。両方の方法のいずれかをコメントアウトし、実行時間を決定し、最後に時間を比較します。 JVMモニター:私はと呼ばれる、日食に統合されたJavaプロファイラを試みた日食酸素について日食のスピードを測定する、実行時間、実行時間

public long getTime() { 
    return System.currentTimeMillis(); 
} 

:私は私のプログラムのように任意のコードを使用する必要はありません。

しかし、私はCPUの複雑な詳細だけを取得します。私のメソッドの実行時間に本当に属していない他の情報。それとも私は何かを見落としましたか?

多分、Eclipse Marketplaceの別のプラグインは、実行時間だけに役立ち、集中しますか? OpenJDKのから

+0

コードを必要としない場合は、この質問にフラグが立てられます。 – MacStevins

答えて

0

JMH (Java Microbenchmark Harness)はあなたのニーズを満たす必要があります。

JMHは、構築、実行、およびJVMをターゲット ナノ/マイクロ/ミリ/ Javaで書かれたマクロベンチマークや他の言語 を分析するためのJavaのハーネスです。

JMHベンチマークを実行するには、Mavenを使用してアプリケーションのjarファイルに依存するスタンドアロンプ​​ロジェクト をセットアップすることをお勧めします。 ベンチマークが正しく に初期化され、信頼性の高い結果が得られるようにするには、この方法が適しています。既存のプロジェクト内、さらに IDE内からでも ベンチマークを実行することは可能ですが、セットアップはより複雑で結果は信頼性が低くなります。

ここJMHでベンチマークへの単純なアプローチです:

  • は、Eclipseのプロジェクトは、コードあなたを作成すること
  • 編集原型JMH-javaのベンチマーク-原型を使用してMavenプロジェクトを作成します。ベンチマークを行い、jarファイルを作成します。
  • 端末/コマンドプロンプトからjarファイルを実行します。 JMHはそのことを行い、結果を表示します。

はここにHashMapにデータをロードするためにいくつかの些細な注釈付きコードです、あなたより良いアイデアを与えるには:

import java.util.HashMap; 
import java.util.concurrent.TimeUnit; 

import org.openjdk.jmh.annotations.Benchmark; 
import org.openjdk.jmh.annotations.BenchmarkMode; 
import org.openjdk.jmh.annotations.Mode; 
import org.openjdk.jmh.annotations.OutputTimeUnit; 

public class MyBenchmark { 

    @Benchmark 
    @BenchmarkMode(Mode.AverageTime) 
    @OutputTimeUnit(TimeUnit.MILLISECONDS) 
    public void testMethod() { 

     HashMap<Integer, String> map = new HashMap<>(); 

     for (int i = 0; i < 1000; i++) { 
      map.put(i, "" + i); 
     } 
    } 
} 

文字通りJMHを使用するために必要なすべてのコードで、クラスやメソッドは存在していましたMavenによって作成されました。私はちょうどアノテーションとJavaの4行を提供しました。

もちろん、JMHから有益な情報を得ることにはそれ以上のものがありますが、多くのオンラインチュートリアルに従うと約15分で何かを稼働させることができます。 Openjdkは38 code samplesも提供しています。