如何对 Java 函数进行性能基准测试以评估执行效率?
2024-09-04 20:21:45
使用 jmh 对 java 性能基准测试函数:安装 maven 依赖项:org.openjdk.jmh:jmh-使用core创建基准测试类别 @benchmark 注释标记应采用基准测试的方法 mvn verify -dtest= 运行基准测试分析 jmh 生成的报告,了解方法的执行时间和指标
如何使用 JMH 对 Java 性能基准测试函数来评估执行效率
性能基准测试对优化应用程序性能至关重要。Java Microbenchmark 套件 (JMH) 对于优秀的框架来说,它是一个很好的框架 Java 精确可靠的基准测试方法。
安装 JMH
立即学习“Java免费学习笔记(深入);
在 Maven 在项目中添加以下依赖项:
<dependency> <groupId>org.openjdk.jmh</groupId> <artifactId>jmh-core</artifactId> <version>1.35.0</version> <scope>test</scope> </dependency>
创建基准测试类
创建一个 Java 类并使用 @Benchmark 基准测试标记的方法:
import org.openjdk.jmh.annotations.*; @State(Scope.Thread) public class FibonacciBenchmark { @Benchmark public long recursiveFibonacci(int n) { if (n <= 1) { return n; } return recursiveFibonacci(n - 1) + recursiveFibonacci(n - 2); } @Benchmark public long iterativeFibonacci(int n) { if (n <= 1) { return n; } long f0 = 0, f1 = 1, result; for (int i = 2; i <= n; ++i) { result = f0 + f1; f0 = f1; f1 = result; } return f1; } }
运行基准测试
该类别在命令行中运行:
mvn verify -Dtest=FibonacciBenchmark
分析结果
JMH 将生成包含相关方法执行时间和其他指标的详细统计信息的报告。这些信息可以用来比较不同方法的效率,并确定性能瓶颈。
实战案例:斐波那契的递归和迭代
考虑到上述两个斐波那契的定义:recursiveFibonacci() 和 iterativeFibonacci()。以下结果显示了使用情况。 JMH 性能基准测试结果:
# JMH version: 1.35 # VM version: JDK 17.0.5, macOS 12.4.0 x86_64 # Benchmarks: 2; Iterations: 5; Warmup: 5; Fork: 1 # Benchmark (ns) Mode CpMn Cp/Op Median Avg Min Max Err % (ns) # recursiveFibonacci avgt 4.574k 319.9k 384.9k 388.0k 358.0k 440.0k 1.922% 17.25 # iterativeFibonacci avgt 0.780k 54.69k 75.94k 82.27k 72.75k 99.79k 3.602% 3.023
如结果所示,对于较小的输入值,递归实现的执行时间相当于迭代实现。然而,对于较大的输入值,迭代实现的效率显著提高,因为递归实现需要大量的递归调用,这将消耗大量的时间和内存。
通过使用 JMH 对于性能基准测试,我们可以确定迭代斐波那契算法对计算较大的斐波那契数更有效,从而指导我们优化决策。
以上就是如何正确 Java 为了评估执行效率,函数进行了性能基准测试?详情请关注图灵教育的其他相关文章!