模仿Go语言的Benchmark测试框架写了JAVA版的简化测试工具

亡梦爱人 提交于 2019-12-06 17:05:54

为了更方便的进行JAVA和Go的性能对比,于是有了搞个和Go类似的Benchmark测试框架的念头。看了两天Go的Benchmark.go源代码,写了个JAVA版的简化Benchmark测试工具。目前仅仅支持测试指定的单个文件、指定的包和当前目录下的所有文件等3个功能。功能非常的简单,够我自己用了。这里下载性能测试框架的源代码:

BenchmarkRunner.java


在阅读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

这里下载性能测试框架的源代码:

BenchmarkRunner.java



测试结果样例:

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!