3

我试图找到一个合理的机会来测量我的java程序/程序部分的速度,例如测试两种方法中哪一种执行得更快。注释掉这两种方法中的一种,确定运行时间,最后比较时间。我不想在我的程序中使用任何代码,例如:

public long getTime() {
  return System.currentTimeMillis();
}

对于 eclipse 氧气,我尝试了集成在 eclipse 中的 java profiler,称为:JVM Monitor。

但是我只获得了例如和其他信息的 cpu 的复杂细节,并不真正属于我的方法的执行时间。还是我忽略了什么。

也许来自 eclipse Marketplaces 的另一个插件更有用并且只关注执行时间?

4

1 回答 1

0

OpenJDK 的JMH(Java Microbenchmark Harness)应该可以满足您的需求:

JMH 是一个 Java 工具,用于构建、运行和分析以 Java 和其他针对 JVM 的语言编写的 nano/micro/milli/macro 基准。

运行 JMH 基准测试的推荐方法是使用 Maven 设置依赖于应用程序的 jar 文件的独立项目。这种方法是首选,以确保正确初始化基准并产生可靠的结果。可以在现有项目中运行基准测试,甚至可以从 IDE 中运行,但是设置更复杂,结果也不太可靠。

这是使用 JMH 进行基准测试的简单方法:

  • 使用原型jmh-java-benchmark-archetype创建一个 Maven 项目
  • 在 Eclipse 中编辑该项目以创建您想要进行基准测试的代码,并构建一个 jar 文件。
  • 从终端/命令提示符执行您的 jar 文件。JMH 会做它的事,并展示它的结果。

为了给你一个更好的主意,这里有一些简单的带注释的代码来将数据加载到 HashMap 中:

import java.util.HashMap;
import java.util.concurrent.TimeUnit;

import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;

public class MyBenchmark {

    @Benchmark
    @BenchmarkMode(Mode.AverageTime)
    @OutputTimeUnit(TimeUnit.MILLISECONDS)
    public void testMethod() {

        HashMap<Integer, String> map = new HashMap<>();

        for (int i = 0; i < 1000; i++) {
            map.put(i, "" + i);
        }
    }
}

这就是使用 JMH 所需的所有代码,并且类和方法已经由 Maven 创建;我只是提供了注解和四行 Java。

当然,从 JMH 获取有用信息远不止这些,但如果您遵循众多在线教程之一,您应该能够在大约 15 分钟内启动并运行一些东西。Openjdk 还提供了 38 个代码示例

于 2018-01-19T08:52:09.407 回答