当前位置: 首页 > 面试题库 >

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

岳朝
2023-03-14
问题内容

我想为我的Java代码(一种单线程,本地,复杂的算法)制定一些性能指标(主要是运行时)。(因此,我不想使用宏基准来衡量JVM的实现。)

有了这个工具,我想

  • 分析复杂性 ,即查看我的代码如何缩放参数n(搜索深度)。(我已经有一个在n中参数化的junit测试。)
  • 如果对代码库进行一些更改会使代码变慢,请进行一些 趋势分析 以得到警告。

为此,我想使用一种工具或框架

  • 进行 统计 ,以最佳方式计算平均值,标准偏差和置信区间。这个非常重要。
  • 可以 参数化 (请参见上面的参数n)。这也很重要。
  • 能够产生花哨的情节会很好,但不是必需的
  • 可以在自动化(junit-)测试中使用,以在程序执行缓慢时警告我,但这不是必需的,只是一个加分。

哪些工具/框架可以满足这些要求?哪一个最适合复杂性和趋势分析,为什么?


问题答案:

以下是我找到的所有工具的字母顺序列表。提到的方面是:

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

自动驾驶

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

标杆管理框架

无法参数化;Java库;JVM微型基准测试;没有密谋; 没有持久性;没有趋势分析;统计。

统计量是否非常好:除了平均值,最大值,最小值和标准差外,它还计算95%置信区间(通过引导)和序列相关性(例如,警告振荡的执行时间,如果程序的行为不确定,则可能发生)因为您使用的是HashSets)。它决定必须多久重复一次程序才能获得准确的度量,并解释这些度量以进行报告和警告(例如,有关异常值和串行相关性的信息)。

不幸的是,该框架包含在util-package中,该util-package与许多其他帮助程序类捆绑在一起。基准类取决于JSci(Java的科学API)和MersenneTwister(http://www.cs.gmu.edu/~sean/research/)。如果作者布伦特·博耶(Brent
Boyer)有时间,他将把该库煮沸,并添加一个更简单的绘图仪,以便用户可以直观地查看测量值,例如相关性和异常值。

卡尺

可参数化 Java库;JVM微型基准测试;密谋 坚持不懈 没有趋势分析;统计。

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

公用监控

无法参数化!Java库;没有JVM微基准测试!密谋 通过servlet的持久性;没有趋势分析!没有统计信息!

支持AOP检测。

贾蒙

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

与log4j交织在一起的良好监视功能,也可以通过编程方式访问或查询数据,并且您的程序可以对结果进行操作。

爪哇西蒙

无法参数化!Java库;没有JVM微基准测试;仅与Jarep密谋;仅JMX具有持久性;没有趋势分析;没有统计信息!

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

JETM

无法参数化;Java库;JVM微型基准测试;密谋 坚持不懈 没有趋势分析;没有统计。

不错的轻量级监视工具,没有依赖项:)没有提供足够的统计信息(没有标准偏差),并且相应地扩展插件非常困难(聚合器和聚合器只有固定的最小,最大和平均值吸气剂)。

仪表

可参数化!Java库; 没有JVM微基准测试!密谋 坚持不懈 趋势分析!?; 统计!?。

良好的监控库,专门用于负载测试Web应用程序。

Java Microbenchmark线束(jmh

可参数化(通过Java API的自定义调用程序);Java库;JVM微基准测试;没有地块; 没有持久性;没有趋势分析;统计。

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

基准测试

可参数化 Java库;JVM微型基准测试;密谋
持久性(使用CONSOLE,XML或数据库H2);图形趋势分析;统计信息(最大值,最小值,平均值,标准差;但不易扩展以进行进一步的统计)。

只需在您的junit测试中添加junit-4-rule :)

junit-Benchmarks是Apache 2许可下的开放源代码。

更新 :项目移至jmh

juniperf

主要用于对性能(使用JUnit测试装饰器TimedTest)和可伸缩性(使用JUnit测试装饰器LoadTest)进行趋势分析。

可参数化 Java库;没有JVM微基准测试;没有密谋; 没有持久性;没有统计。

perf4j

无法参数化;Java库;没有JVM微基准测试;密谋 通过JMX的持久性;通过log4j附加器进行趋势分析;统计。

基于日志记录框架,可以使用AOP。

百老汇计划

非常笼统的概念:监视器遵守预定义的条件并指定在满足条件时如何做出反应。

快速mcbenchmark

主要关注参数可设置性:检查算法是否可扩展,即检查是否为O(n),O(n log(n)),O(n²)…

Java库; JVM微型基准测试;没有密谋; 坚持不懈 趋势分析; 没有统计。

磨床

可参数化 Jython库;没有JVM微基准测试;密谋 坚持不懈 没有趋势分析;没有良好的统计数据,但易于扩展。

取决于Jython,HTTPClient,JEditSyntax,ApacheXMLBeans,PicoContainer。

TPTP

可参数化!Java工具平台;没有JVM微基准测试!密谋 坚持不懈 图形趋势分析;没有统计!!

测试和性能工具平台是一个巨大的通用且可扩展的工具平台(基于Eclipse和四个EMF模型)。因此,它功能强大但相当复杂,可能会减慢Eclipse的速度,并根据您的需要对其进行扩展(例如,使用统计信息以使其影响html" target="_blank">迭代次数)似乎非常困难。

乌西蒙

可参数化!Java库;没有JVM微基准测试;密谋 坚持不懈 趋势分析!?; 统计!?。

该工具专门针对大型集群中的监视而设计。



 类似资料:
  • 问题内容: 当我们尝试为应用程序设置尽可能多的单元测试时,我总是发现缺少UI级别的测试。那里有很多选择,但是我不确定哪是一个很好的起点。 您首选的用于测试Swing应用程序的单元测试工具是什么?你为什么喜欢它? 问题答案: 在我们这边,我们使用FEST测试SWING GUI 。这是经典摇摆机器人上的适配器,但可以大大简化其使用。 结合TestNG,我们发现这是一种通过GUI模拟“人为”行为的简便方

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我正在为公司Intranet创建一个Web应用程序,因为该系统的其他部分是用Java编写的,因此出于集成目的,选择Java作为Web前端。 有要求: 必须在短

  • 问题内容: 在Java中创建模拟对象的最佳框架是什么?为什么?每个框架的优缺点是什么? 问题答案: 我使用Mockito取得了成功。 当我尝试学习JMock和EasyMock时,我发现学习曲线有些陡峭(尽管也许就是我自己)。 我喜欢Mockito,因为它的语法简洁明了,我很快就能掌握。最小的语法旨在很好地支持常见情况,尽管几次我需要做一些更复杂的事情,但我发现我想要的东西是受支持的并且易于理解。

  • 问题内容: 我已经编写了一个小型Java应用程序,我需要为其获取性能指标,例如内存使用率,运行时间等。有没有简单易用的性能衡量工具? 问题答案: Yourkit非常好(30天免费试用)。Eclipse还内置了TPTP工具。

  • 问题内容: 我听说过使用过这个术语,但是我不确定它的含义,因此: 它是什么意思,不是什么意思? 什么是IS和IS N’T微基准测试的一些示例? 微基准测试有哪些危险,如何避免? (或者这是好事吗?) 问题答案: 它的含义与锡罐上所说的完全一样-它正在衡量“小”东西的性能,例如对操作系统内核的系统调用。 危险在于人们可能会使用从微基准测试中获得的任何结果来指示优化。众所周知: 我们应该忘掉效率低下的

  • 问题内容: 根据您的经验,您可以推荐一些东西吗?我使用了izpack,它是一个非常不错的工具,还有其他更好的工具吗? 问题答案: 在MS Windows中,NSIS很棒,它是免费的,并且OSS 参考:具有自动JRE安装的Java启动器