gpt4 book ai didi

java - 在 Java 中获取 nanos unix 纪元时间的最快方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:42 29 4
gpt4 key购买 nike

我目前这样做是为了成功获得以纳米为单位的当前纪元时间:

Instant inst = Instant.now();
long time = inst.getEpochSecond();
time *= 1000000000l;
time += inst.getNano();

但是,对于我的用例来说它有点太慢了,在 JVM 预热后每次调用大约需要 1us

有没有更快的方法?

我很高兴有一个解决方案可以提供自纪元以来的微秒数,只要它比上面的更快。

最佳答案

可能有用的是运行:

long n1 = System.nanoTime();
long m = System.currentTimeMillis();
long n2 = System.nanoTime();

多次直到 n1 和 n2 之间的差异小于您想要的分辨率(经过几次迭代后,在我的 PC 上大约为 400 ns)。

然后您可以使用 n1(或 n2 或 2 的平均值...)和 m * 1e6 之间的差异作为您需要添加的偏移量到 System.nanoTime() 获取当前纪元 nanos。

免责声明:

  • System.nanoTime 文档明确指出分辨率至少是 System.currentTimeMillis() 的分辨率,可能 > 1 毫秒。所以不能保证您会获得微秒分辨率。
  • 推论:这可能不适用于所有环境(您可能永远无法将 n2-n1 设置得足够小 - 或者它可能为 0,因为您的系统分辨率太低)。
  • System.nanoTime() 可能会长时间不同步 - 因此这是精度和性能之间的权衡。
  • 您还需要考虑可能的算术溢出。

另请参阅:Current time in microseconds in java

关于java - 在 Java 中获取 nanos unix 纪元时间的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58302020/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com