8

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

卡迪

4

3 回答 3

14

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

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

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

于 2010-07-06T20:06:37.717 回答
3

@Ben S 的回答很到位。

但是,应该注意的是,在代码中插入时间测量语句的方法不会扩展:

  • 它使您的代码看起来一团糟。
  • 它使您的应用程序运行速度变慢。那些呼吁System.nanoTime()不要免费来的!
  • 它引入了错误的可能性。

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

于 2010-07-06T22:29:48.987 回答
0

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

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

于 2010-07-06T20:52:37.717 回答