gpt4 book ai didi

java - 在优化的情况下精确测量时间

转载 作者:太空宇宙 更新时间:2023-11-04 07:48:21 25 4
gpt4 key购买 nike

long start = System.nanoTime ();           // 1
//whatever operations // 2
long elapsed = System.nanoTime () - start; // 3

是否有可能语句 1 和 3 被混在一起,导致我们无法精确测量时间?

--------------感谢所有反馈,让我们将代码更改为:

long start = System. currentTimeMillis ();           // 1
try { Thread.sleep (1000); } catch (Exception e) {} // 2
long elapsed = System. currentTimeMillis () - start; // 3

并将问题更改为: 1 2 3 的执行可以重新排序为 1 3 2 吗?如果是这样,我们如何测量 2 需要多长时间?

最佳答案

即使您没有调用 System.nanotTime(),JVM 或 CPU 也不会重新排序这些指令,因为您在分配给 elapsed 的表达式中使用了 start。无论如何,System.nanoTime() 必然会生成一个 native 系统调用,这将阻止重新排序。

也就是说,对于任何有意义的此类时间测量,我希望对 System.nanoTime() 的调用之间的任何内容都将包含至少数十万条指令,因此无论如何重新排序都是不可能的。

如果计时代码太短,任何计算机计时器(包括某些操作系统提供的高分辨率计时器)固有的精度问题将使其无法产生可用的计时结果。

关于java - 在优化的情况下精确测量时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14925251/

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