gpt4 book ai didi

java - 在模拟器上多次运行相同的应用程序时时间戳有很大差异

转载 作者:行者123 更新时间:2023-11-29 08:16:37 26 4
gpt4 key购买 nike

在 android 应用程序中,我正在尝试进行指数模运算,并想计算该过程所花费的时间。所以我创建了 2 个时间戳,一个在操作之前,另一个在操作之后

Calendar calendar0 = Calendar.getInstance();
java.util.Date now0 = calendar0.getTime();
java.sql.Timestamp currentTimestamp0 = new java.sql.Timestamp(now0.getTime());

BigInteger en = big.modPow(e, n);

Calendar calendar1 = Calendar.getInstance();
java.util.Date now1 = calendar1.getTime();
java.sql.Timestamp currentTimestamp1 = new java.sql.Timestamp(now1.getTime());

当我多次运行应用程序时,对于相同的输入,这 2 个时间戳报告的时间差异在很大范围内变化。它给出的时间范围为 [200ns-6ns]

有人可以指出造成这种结果/我做错了什么的原因吗?

最佳答案

一方面,您的时间安排非常复杂。这里有一些东西可以提供同样多的准确性,但更简单:

long start = System.currentTimeMillis();
BigInteger en = big.modPow(e, n);
long end = System.currentTimeMillis();

请注意 java.util.Date 只能精确到最接近的毫秒,使用相同的值并将其放入 java.sql.Timestamp 不会神奇地使它更准确。因此 任何 不到一毫秒 (6ns-200ns) 的结果显然是虚假的 - 基本上任何不到一毫秒的结果都是 0。

可能可以使用 System.nanoTime 获得更准确的读数 - 我不知道 Android 是否支持它。也可能有替代的高精度计时器可用。

现在关于为什么操作实际上可能花费非常不同的记录时间:

  • 上面使用的系统时钟的粒度可能远小于 1 毫秒。例如,如果它的测量值不小于 15 毫秒,您可能会看到一些操作据称需要 0 毫秒,而一些操作需要 15 毫秒,即使它们实际上花费的时间相同。
  • 很容易涉及其他因素,最明显的是垃圾收集

关于java - 在模拟器上多次运行相同的应用程序时时间戳有很大差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4360487/

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