我正在尝试使用计时器来测量执行时间,同时更改输入数组的大小,以测量算法的复杂性。
我现在的代码相当简单:
public void start() {
start = System.nanoTime();
}
public long stop() {
long time = System.nanoTime() - start;
start = 0;
return time;
}
它似乎工作得很好,直到数组的大小变得非常大,并且我期望的 O(n) 复杂度算法结果看起来是 O(n^2)。我相信这是由于 CPU 上的线程造成的,在 n 值较大的运行过程中,其他进程会占用更多时间。
基本上,我想测量我的进程运行了多长时间,而不是自调用算法以来已经运行了多长时间。在 Java 中是否有一种简单的方法可以做到这一点?
最佳答案
测量执行时间是一个非常有趣但也很复杂的话题。要在 Java 中正确执行此操作,您必须了解一点 JVM 的工作原理。 Here是来自developerWorks 的一篇关于基准测试和测量的好文章。阅读它,会对你有很大帮助。
作者还提供了一个用于做基准测试的小框架。您可以使用这个框架。它将为您提供您所需要的确切内容 - CPU 消耗时间,而不仅仅是之前和之后的两个时间戳。该框架还将处理 JVM 预热并跟踪即时编译。
您还可以使用性能监视器,如 this一个用于 Eclipse。这种性能监视器的问题是,它不执行基准测试。它只是跟踪您的应用程序当前使用的时间、内存等。但这并不是真正的测量结果 - 它只是特定时间的快照。
关于Java - 测量方法执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10463793/