这是一个简单的用来对Java代码做性能评估的工具库。
特性
- 轻量级(jar包仅
26kb) - API简单易用
- 易于集成或扩展
Maven集成
1 | <dependency> |
API 介绍和使用
预先准备
在对Java方法做性能测试之前,先准备好待测试的类和方法:
1 | /** |
Stalker类
1. 最简示例
以下代码将会预热5次,然后在单线程下正式执行10次,从而将运行结果计算统计并输出出来:
1 | public static void main(String[] args) { |
以上结果将默认在控制台输出:
1 | +-----------------------------------------------------------------------------------------------------------------------------------------+ |
2. 更全示例
以下代码表示,两个方法hello()和fastHello()将会预热1000次,在1000个线程200个并发下,每次执行10次:
1 | Stalker.run(Options.of(1000, 200).warmups(1000).runs(10), |
以上结果将默认在控制台输出:
1 | +------------------------------------------------------------------------------------------------------------------------------------------+ |
结果说明:
Costs: 实际正式运行所消耗的总时间Total: 正式运行的总次数Success: 正式运行的成功次数Failure: 正式运行的失败次数Sum: 每次运行的耗时结果求和之后的值Avg: 所有运行耗时结果的算术平均数Min: 所有运行耗时结果中最小值Max: 所有运行耗时结果中最大值StdDev: 所有运行耗时结果的标准方差95% LowerConfidence: 95%置信区间的最小边界值95% LowerConfidence: 95%置信区间的最大边界值
3. 主要方法
void run(Runnable... runnables): 对若干个要执行的代码做性能测量评估.void run(Options options, Runnable... runnables): 通过自定义的Options对若干个要执行的代码做性能测量评估.
Options类
Options表示做性能测量时的选项参数
主要属性如下
name: 选项参数的名称threads: 正式执行的线程数,默认为1。concurrens: 正式多线程下执行的并发数,默认为1。warmups: 单线程下的预热次数,默认5。runs: 每个线程正式执行的次数,默认10。printErrorLog: 是否打印错误日志,默认false。outputs: 将测量结果通过多种方式(集合)输出出来,默认为输出到控制台,可自定义实现MeasureOutput接口。
主要方法
以下是构造Options实例的若干重载方法:
Options of(String name)Options of(int runs)Options of(String name, int runs)Options of(int threads, int concurrens)Options of(String name, int threads, int concurrens)Options of(String name, int threads, int concurrens, int runs)
其他方法:
boolean valid(): 校验Options相关参数是否合法Options named(String name): 设置 Options 实例的 name 属性Options threads(int threads): 设置 Options 实例的 threads 属性Options concurrens(int concurrens): 设置 Options 实例的 concurrens 属性Options warmups(int warmups): 设置 Options 实例的 warmups 属性Options runs(int runs): 设置 Options 实例的 runs 属性Options printErrorLog(boolean printErrorLog): 设置 Options 实例的 printErrorLog 属性Options outputs(MeasureOutput... measureOutputs): 自定义设置 Options 实例的 MeasureOutput 输出通道
Assert类
Assert类主要用来做断言使用。
示例
1 | Assert.assertFaster(Options.of(), |
许可证
本 stalker 类库遵守 Apache License 2.0 许可证。
</div>
<hr/>
<div class="reprint" id="reprint-statement">
<div class="reprint__author">
<span class="reprint-meta" style="font-weight: bold;">
<i class="fas fa-user">
文章作者:
</i>
</span>
<span class="reprint-info">
<a href="/" rel="external nofollow noreferrer">blinkfox</a>
</span>
</div>
<div class="reprint__type">
<span class="reprint-meta" style="font-weight: bold;">
<i class="fas fa-link">
文章链接:
</i>
</span>
<span class="reprint-info">
<a href="/posts/2019/02/14/bian-cheng-yu-yan/java/java-dai-ma-xing-neng-ping-gu-ku-stalker-jie-shao/">/posts/2019/02/14/bian-cheng-yu-yan/java/java-dai-ma-xing-neng-ping-gu-ku-stalker-jie-shao/</a>
</span>
</div>
<div class="reprint__notice">
<span class="reprint-meta" style="font-weight: bold;">
<i class="fas fa-copyright">
版权声明:
</i>
</span>
<span class="reprint-info">
本博客所有文章除特別声明外,均采用
<a href="https://creativecommons.org/licenses/by/4.0/deed.zh" rel="external nofollow noreferrer" target="_blank">CC BY 4.0</a>
许可协议。转载请注明来源
<a href="/" target="_blank">blinkfox</a>
!
</span>
</div>
</div>
<script async defer>
document.addEventListener("copy", function (e) {
let toastHTML = '<span>复制成功,请遵循本文的转载规则</span><button class="btn-flat toast-action" onclick="navToReprintStatement()" style="font-size: smaller">查看</a>';
M.toast({html: toastHTML})
});
function navToReprintStatement() {
$("html, body").animate({scrollTop: $("#reprint-statement").offset().top - 80}, 800);
}
</script>