Search code examples
javacomparebenchmarkingstringbuilderstringbuffer

Benchmarking in Java (comparing two classes)


I'll want to compare the speed of work two classes (StringBuider and StringBuffer) using append method.

And I wrote very simple program:

public class Test {
    public static void main(String[] args) {
        try {
            test(new StringBuffer("")); // StringBuffer: 35117ms.
            test(new StringBuilder("")); // StringBuilder: 3358ms.
        } catch (IOException e) {
            System.err.println(e.getMessage());
        }
    }
    private static void test(Appendable obj) throws IOException {
        long before = System.currentTimeMillis();
        for (int i = 0; i++ < 1e9; ) {
            obj.append("");
        }
        long after = System.currentTimeMillis();
        System.out.println(obj.getClass().getSimpleName() + ": " +
                          (after - before) + "ms.");
    }
}

But I know, that it's bad way for benchmarking. I want to put the annotations on the method or class, set the number of iterations, tests, different conditions and at the output to get accurate results.

Please advise a good library or standard Java tools to solve this problem. Additionally, if not difficult, write a good benchmarking.

Thanks in advance!


Solution

  • JMH, the Java Microbenchmark Harness, allows to run correct micro benchmarks. It uses annotations to express benchmark parameters.