我想捕捉在 Java 类中从语句 A 到语句 B 的时间。在这些语句之间,有许多 Web 服务调用。我想知道java中是否有类似秒表的功能可以用来捕捉确切的时间?
卡迪
这将为您提供两次nanoTime()
调用之间的纳秒数。
long start = System.nanoTime();
// Java statements
long diff = System.nanoTime() - start;
对于更复杂的方法,有几个重复的问题可以解决 Stopwatch 类:
@Ben S 的回答很到位。
但是,应该注意的是,在代码中插入时间测量语句的方法不会扩展:
System.nanoTime()
不要免费来的!如果您的真正目标是尝试找出应用程序运行缓慢的原因,以便决定要优化什么,那么更好的解决方案是使用 Java 分析器。这样做的好处是您需要对源代码进行零更改。(当然,剖析并没有给你在特定部分花费的确切时间。相反,它给你时间比例......这对于决定优化的地方要有用得多。)
System.currentTimeMillis 将以毫秒为单位,以纳秒为单位获得 nanoTime。
如果您尝试比较不同技术的性能,请注意 JVM 环境很复杂,因此只花一次时间是没有意义的。我总是写一个循环,在其中执行方法 1 几千次,然后执行 System.gc,然后执行方法 2 数千次,然后执行另一个 System.gc,然后循环返回并再次执行整个操作至少五次或六次。这有助于平均化垃圾收集、即时编译和 JVM 中发生的其他神奇事情的时间。