为了更方便的进行JAVA和Go的性能对比,于是有了搞个和Go类似的Benchmark测试框架的念头。看了两天Go的Benchmark.go源代码,写了个JAVA版的简化Benchmark测试工具。目前仅仅支持测试指定的单个文件、指定的包和当前目录下的所有文件等3个功能。功能非常的简单,够我自己用了。这里下载性能测试框架的源代码:
在阅读Go的源代码过程中,感觉Go的接口太灵活了,很多简化的写法,让不熟悉这种风格的人头大。一会是面向对象,一会又转成函数式编程,对从JAVA世界转过来的人来说,很不适应。在实现Benchmark工具的过程中,最麻烦的就是控制循环次数、步进长度和时间。在调试过程中,一不小心,出现了10亿次的循环,搞的我很郁闷。目前我没找到很好的解决办法,暂时就把被测试操作的单次运行时间限制在1秒内,循环次数控制在1百万次之内。等以后有需要再补上可以参数调整的运行时间和循环次数。
使用方法:
首先在JAVA类里面,定义相关的Benchmark开头的测试方法。例如,
public void BenchemarkDoubleToString(B b){
for (int i = 0; i < b.n; i++) {
//这里放需要性能测试的方法
String tmp =""+flist[j];
}
}
然后,执行BenchmarkRunner。
例如,
1.直接遍历当前目录下的class文件,并执行里面的带Benchmark开头的测试方法。
java -server BenchmarkRunner
2.直接遍历某个包下的class文件,并执行里面的带Benchmark开头的测试方法。
java -server BenchmarkRunner org.aos.test
3.直接执行指定class文件里面的带Benchmark开头的测试方法。
java -server BenchmarkRunner org.aos.test.DoubleToStringBenchmarkTest.class
这里下载性能测试框架的源代码:
测试结果样例:
search package org.aos.test
BenchemarkFloatToString 500000 2582 ns/op
OK. Time costs:1 s
BenchemarkDoubleToString 500000 4990 ns/op
OK. Time costs:2 s
来源:oschina
链接:https://my.oschina.net/u/556853/blog/62407