Java - 测量方法执行时间

标签 java multithreading timing stopwatch

我正在尝试使用计时器来测量执行时间,同时更改输入数组的大小,以测量算法的复杂性。

我现在的代码相当简单:

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/

相关文章:

java - JUnit:测试某种类型的异常

java - 在Java中,试图打印一个整数中有多少位数字平均分为整个整数

java - 如何在JAVA类中填充数组

c - 为什么在 select 中使用 writefds ?如何在实践中使用它们?

audio - AKSequencer 中播放的第一个音符已关闭

java - 我的程序设计为顺序、迭代和递归地搜索 .txt 文件,结果为 "error: int cannot be dereferenced"

python3中的多线程

wpf - 我可以从工作线程初始化 ViewModel 吗?

iphone - 如何在 iPhone 上编写实时准确的音频音序器?

python - 如何解释timeit返回的字符串