nanobench のインターフェース変えた

lambda 使わないほうがいいんじゃない?という意見を kazuho さんから頂いたので、使わないようにしてみた。 lambda 使わない方がデバッガで追いやすいというのは一理あるので、それもまたいいのかな、と。

というわけで、以下のように書けばいいという感じになった。

import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;

public class ListBenchmark {
    // Benchmarking method must be started with 'bench'.
    public void benchArrayList() {
        List<Integer> l = new ArrayList<>();
        for (int i=0; i<1_000_000; ++i) {
            l.add(i);
        }
    }

    public void benchLinkedList() {
        List<Integer> l = new LinkedList<>();
        for (int i=0; i<1_000_000; ++i) {
            l.add(i);
        }
    }
}

/^bench/ から始まってるメソッドが走っていい感じにベンチマークが取られます。

これを javac でコンパイルして nanobench.jar から実行させればいいという寸法。

> javac ListBenchmark.java
> java -jar nanobench.jar ListBenchmark

Score:

benchArrayList:  1 wallclock secs ( 1.03 usr +  0.10 sys =  1.13 CPU) @ 142.79/s (n=162)
benchLinkedList:  2 wallclock secs ( 1.07 usr +  0.15 sys =  1.21 CPU) @ 146.54/s (n=178)

Comparison chart:

                      Rate  benchArrayList  benchLinkedList
     benchArrayList  143/s              --              -3%
    benchLinkedList  147/s              3%               --

nanobench.jar があれば、どこでも動くので便利。

Published: 2014-11-28(Fri) 08:09