捕获两个语句Java之间的执行时间?

时间:2010-07-06 20:01:01

标签: java time stopwatch

我想在Java类中捕获从语句A到语句B的时间。在这些语句之间,有许多Web服务调用。我想知道是否有一些类似于java的功能,我可以使用它来捕获确切的时间?

Kaddy

3 个答案:

答案 0 :(得分:14)

这将为您提供两个nanoTime()来电之间的纳秒数。

long start = System.nanoTime();
// Java statements
long diff = System.nanoTime() - start;

对于更复杂的方法,有几个重复的问题可以解决秒表类:

答案 1 :(得分:3)

@Ben S的回答很明显。

但是,应该注意的是,将时间测量语句插入代码的方法无法扩展:

  • 这会让你的代码变得一团糟。
  • 它使您的应用程序运行得更慢。拨打System.nanoTime()的电话不是免费的!
  • 介绍了bug的可能性。

如果您的真正目标是尝试找出应用程序运行缓慢的原因,以便确定要优化的内容,那么更好的解决方案是使用Java分析器。这样做的好处是您需要对源代码进行ZERO更改。 (当然,分析不会给你在特定部分花费的确切时间。相反,它给你时间比例......这对于决定优化的位置更有用。)

答案 2 :(得分:0)

System.currentTimeMillis将以毫秒为单位,nanoTime以毫秒为单位。

如果您正在尝试比较不同技术的性能,请注意JVM环境很复杂,因此只需一次就没有意义。我总是写一个循环,我执行方法1几千次,然后执行一个System.gc,然后执行方法2几千次,然后执行另一个System.gc,然后循环返回并再次执行整个操作至少五次或六次。这有助于平均垃圾收集,即时编译以及JVM中发生的其他神奇事情的时间。