java - Java 计时器领域的现状如何?

标签 java performance time

我不时遇到提到 System.nanoTime()System.currentTimeMillis() 慢很多(调用可能花费高达微秒),但是证明链接通常已经过时,或者导致一些相当自以为是的博客文章不能真正被信任,或者包含与特定平台或这个或那个等有关的信息。

我没有运行基准测试,因为我对自己进行涉及如此敏感问题的实验的能力持现实态度,但我的条件非常明确,所以我期待一个相当简单的答案。

那么,在平均 64 位 Linux(意味着 64 位 JRE)、Java 8 和现代硬件上,切换到 nanoTime() 会花费我几微秒的时间来调用吗?我应该留在 currentTimeMillis() 吗?

最佳答案

与往常一样,这取决于您使用它的目的。由于其他人在抨击 nanoTime,我将为其添加一个插件。我在生产代码中专门使用 nanoTime 来测量耗时

我在生产中避免使用 currentTimeMillis,因为我通常需要一个不会像挂钟那样(并且确实)来回跳动的时钟。这在我使用基于计时器的重要决策的系统中至关重要。 nanoTime 应该以您期望的速度单调递增。

事实上,我的一位同事说“currentTimeMillis 仅对人类娱乐有用”(例如调试日志中的时间,或网站上显示的时间),因为它不可信测量耗时。

但实际上,我们尝试尽可能多地使用时间,并尝试将时间排除在我们的协议(protocol)之外;然后我们尝试使用逻辑时钟;最后,如果绝对必要,我们使用基于 nanoTime 的持续时间。

更新:一个地方我们在连接两个主机时使用 currentTimeMillis 作为健全性检查,但我们正在检查是否房东的时钟相差超过 5 分钟。

关于java - Java 计时器领域的现状如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24701024/

相关文章:

Python 调色板相机框架非常慢

Python时区转换

java - 比较 epoch 毫秒和 LocalDateTime 之间的 java 时间

c++ - 为什么这个应用程序没有像预期的那样消耗内存

performance - Haskell 中的编辑距离算法 - 性能调优

c - 向 stat() 添加几秒的偏移量

java - Java ArrayList 的时间复杂度

java - 加载 FXML 文件时,它的关联 Controller 也会加载

java - Spring mvc 将数据发送到 Controller

java - 尝试读取 java 中的字符数组