我试图找到一个合理的机会来测量我的java程序/程序部分的速度,例如:测试两种方法中哪一种执行得更快。注释掉其中一种方法,确定运行时间,最后比较时间。我不想在我的程序中使用任何代码,如:
public long getTime() {
return System.currentTimeMillis();
}
对于eclipse氧气,我尝试过在eclipse中集成的java profiler,名为:JVM Monitor。
但是我只得到cpu的复杂细节,例如和其他信息,并不真正属于我的方法的执行时间。或者我忽视了什么。
也许来自eclipse Marketplaces的另一个插件更有用,只关注执行时间?
答案 0 :(得分:0)
JMH (Java Microbenchmark Harness)应该满足您的需求:
JMH是用于构建,运行和分析的Java工具 用Java和其他语言编写的nano / micro / milli / macro基准测试 针对JVM。
运行JMH基准测试的推荐方法是使用Maven来设置a 依赖于应用程序的jar文件的独立项目。 这种方法是优选的,以确保基准测试正确 初始化并产生可靠的结果。它可以运行 来自现有项目的基准,甚至来自内部的基准 IDE,但设置更复杂,结果不太可靠。
这是使用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 code samples。