问题标签 [nanotime]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3135 浏览

java - 将 python time.time() 转换为 java.nanoTime()

java的 System.nanoTime() 似乎给了很长的时间: 1337203874231141000L 而 python time.time() 会给出类似 1337203880.462787 的东西

如何将 time.time() 的值转换为与 System.nanoTime() 匹配的值?

0 投票
4 回答
2629 浏览

java - 在 Java 中使用 nanotime 比较方法速度性能

我想比较两个 readDataMethod() 的速度性能(如果有的话),如下所示。

大多数情况下,我得到的结果表明方法 2 具有“较低”的价值。

此测试是否证明 readDataMethod2 比之前的更快?

0 投票
4 回答
13275 浏览

java - System.nanoTime() 的精度与精度

文档System.nanoTime()说明如下(强调我的)。

此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意时间以来的纳秒(可能在将来,因此值可能为负数)。此方法提供纳秒精度,但不一定提供纳秒精度。不保证值的变化频率。

在我看来,这可以用两种不同的方式来解释:

  1. 上面粗体是指单独的返回值。然后,精度和准确度要从数字的意义上来理解。也就是说,精度是指有效数字的个数——截断的位置,而精度是数字是否正确(比如这里的顶部答案中描述的 'precision'和'accuracy'有什么区别?

  2. 上面粗体是指方法本身的能力。然后,精度和准确性将被理解为飞镖类比(http://en.wikipedia.org/wiki/Precision_vs._accuracy#Accuracy_versus_precision:_the_target_analogy)。所以,低精度,高精度 => 错误的值被重复命中,精度很高:想象物理时间静止,连续调用 nanoTime() 返回相同的数值,但它与实际经过的时间不同,因为参考时间由一些恒定的偏移量。

哪种解释是正确的?我的观点是,解释 2 意味着使用 nanoTime() 测量时间(通过减去两个返回值)将正确到纳秒(因为测量中的恒定误差/偏移将被消除),而解释 1 将'不能保证测量之间的这种一致性,因此不一定意味着时差测量的高精度。


2013 年 4 月 15 日更新: Java 7 文档System.nanoTime()已更新,以解决可能与之前的措辞混淆的问题。

返回正在运行的 Java 虚拟机的高分辨率时间源的当前值,以纳秒为单位。

此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意的原始时间以来的纳秒(可能在将来,因此值可能为负数)。在 Java 虚拟机实例中,此方法的所有调用都使用相同的来源;其他虚拟机实例可能使用不同的来源。

此方法提供纳秒精度,但不一定提供纳秒分辨率(即值更改的频率) - 除了分辨率至少与currentTimeMillis().

由于数值溢出,超过大约 292 年(2 63纳秒)的连续调用的差异将无法正确计算经过的时间。

仅当计算在 Java 虚拟机的同一实例中获得的两个此类值之间的差异时,此方法返回的值才有意义。

0 投票
6 回答
36806 浏览

java - 如何暂停 Java 线程一小段时间,比如 100 纳秒?

我知道Thread.sleep()可以使 java 线程暂停一段时间,例如某些毫秒和某些纳秒。但问题是这个函数的调用也会导致开销。

例如,如果我想让一个线程挂起 100 纳秒,我调用Thread.sleep(0, 100)。这个过程的全部成本是invocation_cost + 100 nanosceonds,这可能比我想要的要大得多。我怎样才能避免这个问题,并达到我的目的?

我需要这个的原因是我想离线进行模拟。我分析了一个任务的执行时间;现在我想通过在同一时间段内挂起一个线程来模拟这个执行时间。

谢谢!

0 投票
2 回答
420 浏览

java - 为什么第一次调用构造函数花费的时间是其他调用的 10 倍?

我总是得到类似的结果7806 660 517。为什么第一次通话的时间是其他通话的 10 倍?

0 投票
2 回答
874 浏览

android - Android - 测量通过意图打开活动和收到结果之间的时间

我有一个简单的应用程序,可以打开 ZXing 的条形码扫描仪应用程序。

现在,我想知道完成一次扫描需要多少时间。基本上是从意图启动到获得结果的时间。现在,我知道这很简单,只需在执行意图时放置一个 nanoTime 对象,当我得到结果时放置另一个 nanoTime,将两者相减并相乘以秒/毫秒为单位。

但是,我有循环的意图,因为我想扫描一系列二维码,我认为 for 循环是最好的方法。

所以我有几个全局时间变量long start、end、time;

这是意图的代码:

这是获取输入的代码。

我注释掉了我启动计时器的部分,因为我不确定将它们放在哪里。发生的情况是,如果我在循环之前调用它,我只会得到一个结果,如果我把它放在循环内,我会得到多个彼此相距不远的结果。

如果仅调用一次,则获取意图完成所需的时间很容易,但如果在循环中多次调用它,则变得很棘手。

那么,有没有办法适当地花费意图打开并获得结果所需的时间?我愿意接受建议,即使这意味着重写我多次调用活动的方式(我目前正在使用循环)。

我还希望能够在扫描代码后立即获得时间,这样我就知道活动调用和活动结果之间的时间。我不想在每次通话完成之前等待每个通话完成。我要实时更新。谢谢。

0 投票
0 回答
327 浏览

java - 尝试测量插入在数据库中花费的时间

我有一个Multithreaded program将插入到我的一个表中,并且我正在运行的程序是这样的-

java -jar CannedTest.jar 100 10000

意思是:

  • 线程数是100
  • 任务数是10000

所以每个线程都会插入10000 records到我的表中。所以这意味着total count (100 * 10000)表中应该是1,000,000在程序完成执行之后。

作为我们的 LnP 测试的一部分,我正在尝试测量插入到我的表中的时间。我将所有这些数字存储在ConcurrentHashMap插入数据库所需的时间中,如下所示。

当所有线程完成执行所有任务时,我尝试通过对其进行ConcurrentHashMap insertHistogram 排序来打印出数字,我得到如下结果 -KeyMilliseconds

而且,同样,ConcurrentHashMap insertHistogram我尝试制作如下所示的直方图。

注意:- 我试图在其中插入记录的数据库,它Memory Only目前处于模式。

问题陈述:-

看看我上面的结果中的这个数字,它通过在键上排序打印出来 -

0 2335

我不确定它怎么可能2335 calls被插入0 milliseconds?而且我System.nanotime在测量刀片时也在使用。

以下是将打印出上述日志的代码 -

我不确定为什么0当我尝试通过在键上排序直接从 Map 打印值时显示毫秒。

但是0 milliseconds当我尝试将直方图制作成相同的logHistogramInfo method.

我在上述方法的计算过程中做错了什么吗?

0 投票
1 回答
2373 浏览

java - Guava 秒表类的优点是什么?

在 Google Guava 库中,有一个Stopwatch类,它的文档说明了这一点 -

以纳秒为单位测量经过时间的对象。使用此类而不是直接调用来测量经过的时间很有用, System.nanoTime()原因如下:

  1. 出于测试或性能原因,可以替换一个备用时间源。
  2. 正如 所记录的nanoTime,返回的值没有绝对意义,只能解释为相对于 nanoTime 在不同时间返回的另一个时间戳。Stopwatch是一种更有效的抽象,因为它只公开这些相对值,而不是绝对值。

问题 - 他们指的这个“备用时间源”是什么?JRE/JVM 是否也提供此选项?

0 投票
1 回答
99 浏览

java - 极其精确的重复/连续代码执行

在我的公司,我有一个程序必须通过 UDP 将一些数据发送到不受我们控制的远程系统。

数据必须每 7981859ns (=7.98 毫秒) +/- 0.001ms 发送一次。

可悲的是,如果我们传输数据太晚,旧版本的远程系统就会崩溃,如果我们传输太快/太早(实时数据生成),我们这边的数据就会用完。

目前,我们正在通过

如果我添加一些日志记录,我可以看到数据在 6ms - 11ms 之间发送,这对我们来说范围太大了。

我现在想知道如何优化它。

是否可以使用上次传输的纳米时间戳设置变量(如何获得?我只知道System.currentTimeMillis()),更快地执行循环(或只是在循环中while(true)),然后等到“currentNanoTime - lastNanoTime > 7981859 “在做之前send(..)

我的问题是我没有找到等待纳秒的方法,只有几毫秒。

0 投票
2 回答
65334 浏览

python - 如何将纳秒的纪元时间转换为人类可读的?

我有一个以纳秒为单位的纪元时间戳 - 例如自 1970 年 1 月 11360287003083988472日以来的纳秒。

Python 日期时间对象和转换方法仅支持毫秒精度。

有没有一种简单的方法可以将此纪元时间转换为人类可读的时间?