如何在java中对方法执行时间进行基准测试?
2022-08-31 19:51:15
我有一个程序,我自己用java编写,但我想测试方法执行时间并获得特定方法的时间。我想知道这是否可能,也许通过某种方式的日食插件?或者插入一些代码?
我看,这是一个很小的程序,不超过1500行,哪个会更好专用工具还是?System.currentTimeMillis()
我有一个程序,我自己用java编写,但我想测试方法执行时间并获得特定方法的时间。我想知道这是否可能,也许通过某种方式的日食插件?或者插入一些代码?
我看,这是一个很小的程序,不超过1500行,哪个会更好专用工具还是?System.currentTimeMillis()
除了使用探查器之外,获取所需内容的一种简单方法如下:
public class SomeClass{
public void somePublicMethod()
{
long startTime = System.currentTimeMillis();
someMethodWhichYouWantToProfile();
long endTime = System.currentTimeMillis();
System.out.println("Total execution time: " + (endTime-startTime) + "ms");
}
}
如果瓶颈足够大,可以使用探查器进行观察,请使用探查器。
如果你需要更高的准确性,衡量一小段代码的最佳方法是使用Java微板标记框架,如OpenJDK的JMH或Google的Caliper。我相信它们像JUnit一样简单易用,不仅您将获得更准确的结果,而且您将从社区获得专业知识以正确完成它。
遵循 JMH 微基准标记来测量 以下各项的执行时间:Math.log()
private double x = Math.PI;
@Benchmark
public void myBenchmark() {
return Math.log(x)
}
使用 and 进行测量有许多限制:currentMillis()
nanoTime()
Java中的和方法可能很有用,但必须非常谨慎地使用,否则您可能会遇到错误的测量错误,例如测量片段的顺序会影响测量,或者像这样,作者错误地得出结论,在不到一毫秒的时间内执行了数百万次操作,而实际上JMV在制作和提升代码的地方实现了任何操作, 根本不运行任何代码。currentMillis()
nanoTime()
这是一个很棒的视频,解释了如何以正确的方式进行微基准标记:https://shipilev.net/#benchmarking