私はJavaで多くのソートアルゴリズムを実装しており、各アルゴリズムの時間と比較をしたいと考えています。現在、私は、コードの冗長性の膨大な量で、その回ごとのアルゴリズムを別々のスクリプトを持っている:6つのまたは7つの異なるソートアルゴリズムでJavaのベンチマークプログラムにメソッドを渡す
long min = 1000000;
long startTime;
long endTime;
QuickSort quicksorter = new QuickSort();
for (int i = 0; i != 10000; ++i) {
startTime = System.nanoTime();
quicksorter.sort();
endTime = System.nanoTime();
if ((endTime - startTime) < min)
min = endTime - startTime;
}
System.out.printf("Quicksort min time is %d ns.\n", min);
BinaryInsertionSort binarysorter = new BinaryInsertionSort();
min = 1000000;
for (int i = 0; i != 10000; ++i) {
startTime = System.nanoTime();
binarysorter.sort();
endTime = System.nanoTime();
if ((endTime - startTime) < min)
min = endTime - startTime;
}
System.out.printf("Binary insertion sort min time is %d ns.\n", min);
が、これは非常に非効率的な感じを開始します。
long timeit(function func) {
min = 1000000;
for (int i = 0; i != 10000; ++i) {
startTime = System.nanoTime();
func();
endTime = System.nanoTime();
if ((endTime - startTime) < min)
min = endTime - startTime;
}
System.out.printf("Min execution time is %d ns.\n", min);
}
しかし、私はパラメータとしてメソッドを渡すことはお勧めできません(と不便)であることを収集します。このようなパラメータと時間彼らは明らかなように、「パイソン風」ソリューションは、方法を取るメソッドを定義することですJavaのように、一般的に行うのは不可能かもしれません。各ソータークラスはベンチマークメソッドを実装する抽象クラスから継承することができると思いますが、Javaでこれを達成するより良い方法はありますか?
ちょうどJMHを使用してください:http://tutorials.jenkov.com/java-performance/jmh.html#your-first-jmh-benchmark – millimoose