Java 中的基准测试(比较两个 类)
Benchmarking in Java (comparing two classes)
我想使用 append
方法比较两个 classes(StringBuider
和 StringBuffer
)的工作速度。
而且我写了非常简单的程序:
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.");
}
}
但我知道,这 不好的方式 进行基准测试。我想把注释放在方法或 class 上,设置迭代次数、测试、不同的条件和输出以获得 准确的结果 。
请指教一个好的库或标准的Java工具来解决这个问题。另外,如果不难,写一个好的benchmarking。
提前致谢!
JMH,Java Microbenchmark Harness,允许 运行 正确的微基准。它使用注释来表达基准参数。
我想使用 append
方法比较两个 classes(StringBuider
和 StringBuffer
)的工作速度。
而且我写了非常简单的程序:
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.");
}
}
但我知道,这 不好的方式 进行基准测试。我想把注释放在方法或 class 上,设置迭代次数、测试、不同的条件和输出以获得 准确的结果 。
请指教一个好的库或标准的Java工具来解决这个问题。另外,如果不难,写一个好的benchmarking。
提前致谢!
JMH,Java Microbenchmark Harness,允许 运行 正确的微基准。它使用注释来表达基准参数。