在Java中,衡量单线程复杂算法的最佳宏基准测试工具/框架是什么?

在Java中,衡量单线程复杂算法的最佳宏基准测试工具/框架是什么?,java,monitoring,performance,Java,Monitoring,Performance,我想为我的Java代码做一些性能度量(主要是运行时),这是一个单线程、本地、复杂的算法。(因此,我不希望使用宏基准来衡量JVM实现。) 有了这个工具,我想 分析复杂性,即查看我的代码如何缩放参数n(搜索深度)。(我已经在n中参数化了junit测试。) 如果代码库的某些更改使代码变慢,请执行一些趋势分析,以获得警告 为此,我想使用一个工具或框架 进行统计,以最佳方式计算平均值、标准偏差和置信区间。这是非常重要的 可以参数化(参见上面的参数n)。这也是非常重要的 能够产生一个花哨的情节会很好,

我想为我的Java代码做一些性能度量(主要是运行时),这是一个单线程、本地、复杂的算法。(因此,我不希望使用宏基准来衡量JVM实现。)

有了这个工具,我想

  • 分析复杂性,即查看我的代码如何缩放参数n(搜索深度)。(我已经在n中参数化了junit测试。)
  • 如果代码库的某些更改使代码变慢,请执行一些趋势分析,以获得警告
为此,我想使用一个工具或框架

  • 进行统计,以最佳方式计算平均值、标准偏差和置信区间。这是非常重要的
  • 可以参数化(参见上面的参数n)。这也是非常重要的
  • 能够产生一个花哨的情节会很好,但不是必需的
  • 可以在自动(junit-)测试中使用,在程序运行缓慢时警告我,但这也不是必需的,只是一个加号
哪些工具/框架满足这些要求?哪一个最适合进行复杂性和趋势分析?为什么?

另一个选择来自谷歌。它允许。

尝试使用。这是对JUnit4的扩展,功能如下:

记录执行时间平均值和标准偏差。
垃圾收集器活动记录。
每个基准JVM预热阶段。
每次运行和历史图表生成。
H2 SQL数据库中的可选结果持久性(高级查询、历史分析)


下面是我找到的所有工具的字母表。所提及的方面包括:

  • 它容易参数化吗
  • 它是Java库还是至少可以轻松集成到Java程序中
  • 它能否处理JVM微观基准测试,例如使用预热阶段
  • 它能直观地绘制结果吗
  • 它能持久地存储测量值吗
  • 它能做趋势分析来警告新的提交导致了减速吗
  • 它是否提供并使用统计数据(至少最大、最小、平均和标准偏差)

参数化;Perl库;没有JVM微观基准;策划;坚持不懈趋势分析!?;良好的统计数据(运行给定的测试,直到结果稳定;突出显示异常值)

不可参数化;Java库;JVM微观基准测试;禁止密谋;没有坚持;没有趋势分析;统计数字

统计数据做得非常好:除了平均值、最大值、最小值和标准偏差外,它还计算95%的置信区间(通过自举)和序列相关性(例如,警告振荡执行时间,如果您的程序行为不确定,可能会发生振荡执行时间,例如,因为您使用哈希集)。它决定迭代程序以获得准确测量值的频率,并解释这些测量值以用于报告和警告(例如关于异常值和序列相关性)

微观基准测试也做得非常好(详见)

不幸的是,该框架包含一个util包,它与许多其他助手类捆绑在一起。基准类依赖于JSci(Java的科学API)和Mersenne Twister()。如果作者布伦特·博耶(Brent Boyer)有时间,他将精简库并添加一个更简单的图示器,以便用户可以直观地检查测量值,例如相关性和异常值

参数化;Java库;JVM微观基准测试;策划;坚持不懈没有趋势分析;统计数字

相对较新的项目,针对Android应用程序定制。看起来年轻但有前途。取决于谷歌番石榴:(

不可参数化!?;Java库;无JVM微基准测试!?;绘图;通过servlet持久化;无趋势分析!?;无统计数据

支持AOP检测

不可参数化;Java库;无JVM微基准测试;使用其他工具(Jarep或JMX)进行绘图、持久性和趋势分析;统计

良好的监控,与log4j交织在一起,还可以通过编程方式访问或查询数据,并且您的程序可以对结果采取操作

不可参数化!?;Java库;无JVM微基准测试;仅使用Jarep绘图;仅使用JMX持久化;无趋势分析;无统计

Jamon的竞争对手,支持监视器的层次结构

不可参数化;Java库;JVM微基准测试;绘图;持久性;无趋势分析;无统计

很好的轻量级监控工具,没有依赖项:)没有提供足够的统计数据(没有标准偏差),扩展插件看起来相当困难(聚合器和聚合器只有固定的最小、最大和平均getter)

参数化!?;java库;没有JVM微基准测试!?;策划;坚持不懈趋势分析!?;统计数字

为负载测试web应用程序量身定制的良好监控库

可参数化(通过JavaAPI定制调用程序);Java库;JVM微基准;没有阴谋;没有坚持;没有趋势分析;统计数字

由Oracle的HotSpot专家构建的基准测试工具非常适合在HotSpot上进行微基准测试,用于OpenJDK性能工作。采取极端措施以提供可靠的基准测试环境。除了人类可读的输出,jmh还提供了一个Java API来处理结果,例如用于第三方绘图仪和持久性提供程序

参数化;Java库;JVM微观基准测试;策划;持久性(使用控制台、XML或数据库);政府科学研究机构联合会