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

捕获两条Java语句之间的执行时间?,java,time,stopwatch,Java,Time,Stopwatch,我想捕获Java类中从语句A到语句B所需的时间。在这些语句之间有许多web服务调用。我想知道java中是否有类似秒表的功能,可以用来捕捉准确的时间 Kaddy这将为您提供两次nanoTime()调用之间的纳秒数 long start = System.nanoTime(); // Java statements long diff = System.nanoTime() - start; 对于更复杂的方法,有几个重复的问题涉及秒表类: System.currentTimeMillis将

我想捕获Java类中从语句A到语句B所需的时间。在这些语句之间有许多web服务调用。我想知道java中是否有类似秒表的功能,可以用来捕捉准确的时间


Kaddy

这将为您提供两次
nanoTime()
调用之间的纳秒数

long start = System.nanoTime();
// Java statements
long diff = System.nanoTime() - start;
对于更复杂的方法,有几个重复的问题涉及秒表类:



System.currentTimeMillis将以毫秒为单位获取它,而nanoceconds为单位获取nanoTime


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

@Ben的答案是正确的

但是,应该注意的是,将时间度量语句插入代码中的方法不适用于以下情况:

  • 这会让你的代码看起来一团糟
  • 这会使应用程序运行变慢。对
    System.nanoTime()
    的调用不是免费的
  • 它引入了bug的可能性

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

您需要比毫秒更精确的东西吗?如果不是,System.currentTimeMillis()应该做-在开头调用它,在结尾调用它,然后减去。我建议阅读。