【发布时间】:2018-07-24 03:30:22
【问题描述】:
我有一组构成工作流管道的应用程序。在入口 (Java 应用程序) 处触发一个事件,并进行一些处理并将流转移到管道中的下一个应用程序。流程像这样继续下去,直到最后的最后一个应用程序 - egress (也是一个 Java 应用程序)。
我想计算从事件触发器到 egress 应用程序中的最后一个任务所用的总时间。
到目前为止,我已经使用 System.currentTimeMillis() 和 System.nanoTime() 来记录触发事件的时间,然后再次记录时间最后一个 egress 应用程序完成其任务。然后我用这两者之间的差异来衡量整个事件所花费的总时间。
现在,当我将得到的结果 (对于如上所述测量的时间) 与手动时钟时间验证进行比较时,我发现它几乎非常准确。但是,我不太确定这是否是正确的方法,因为它们(入口和出口)是独立的进程。我看到,由于 currentTimeMillis 具有固定的引用,并且由于两个进程在同一主机上以相同的系统时间运行,因此这不会成为问题。
但我读到 nanoTime 是来自 JVM 的任意引用。如果是这样,运行不同 JVM 实例的两个独立 Java 应用程序是否会相同?为什么跨不同进程使用 nanoTime() 的计算也给出了精确的时间间隔。
除了为许多应用程序的这种单向管道计算运行时间最合适的方法是什么?我采取的方法是否正确?
PS:我已经使用了上述两个 API,因为我读到 nanoTime 更精确,只想比较它们。
【问题讨论】:
标签: java performance runtime timing