首页 > 图灵资讯 > 技术篇>正文

如何对 Java 函数进行性能基准测试以评估执行效率?

2024-09-04 20:21:45

使用 jmh 对 java 性能基准测试函数:安装 maven 依赖项:org.openjdk.jmh:jmh-使用core创建基准测试类别 @benchmark 注释标记应采用基准测试的方法 mvn verify -dtest= 运行基准测试分析 jmh 生成的报告,了解方法的执行时间和指标

如何对 Java 函数进行性能基准测试以评估执行效率?

如何使用 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 为了评估执行效率,函数进行了性能基准测试?详情请关注图灵教育的其他相关文章!

上一篇 Java 函数式编程中的高级流处理
下一篇 返回列表

文章素材均来源于网络,如有侵权,请联系管理员删除。