问题标签 [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.
java - 将 python time.time() 转换为 java.nanoTime()
java的 System.nanoTime() 似乎给了很长的时间: 1337203874231141000L 而 python time.time() 会给出类似 1337203880.462787 的东西
如何将 time.time() 的值转换为与 System.nanoTime() 匹配的值?
java - 在 Java 中使用 nanotime 比较方法速度性能
我想比较两个 readDataMethod() 的速度性能(如果有的话),如下所示。
大多数情况下,我得到的结果表明方法 2 具有“较低”的价值。
此测试是否证明 readDataMethod2 比之前的更快?
java - System.nanoTime() 的精度与精度
文档System.nanoTime()
说明如下(强调我的)。
此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意时间以来的纳秒(可能在将来,因此值可能为负数)。此方法提供纳秒精度,但不一定提供纳秒精度。不保证值的变化频率。
在我看来,这可以用两种不同的方式来解释:
上面粗体字是指单独的返回值。然后,精度和准确度要从数字的意义上来理解。也就是说,精度是指有效数字的个数——截断的位置,而精度是数字是否正确(比如这里的顶部答案中描述的 'precision'和'accuracy'有什么区别?)
上面粗体字是指方法本身的能力。然后,精度和准确性将被理解为飞镖类比(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 虚拟机的同一实例中获得的两个此类值之间的差异时,此方法返回的值才有意义。
java - 如何暂停 Java 线程一小段时间,比如 100 纳秒?
我知道Thread.sleep()可以使 java 线程暂停一段时间,例如某些毫秒和某些纳秒。但问题是这个函数的调用也会导致开销。
例如,如果我想让一个线程挂起 100 纳秒,我调用Thread.sleep(0, 100)。这个过程的全部成本是invocation_cost + 100 nanosceonds,这可能比我想要的要大得多。我怎样才能避免这个问题,并达到我的目的?
我需要这个的原因是我想离线进行模拟。我分析了一个任务的执行时间;现在我想通过在同一时间段内挂起一个线程来模拟这个执行时间。
谢谢!
java - 为什么第一次调用构造函数花费的时间是其他调用的 10 倍?
我总是得到类似的结果7806 660 517
。为什么第一次通话的时间是其他通话的 10 倍?
android - Android - 测量通过意图打开活动和收到结果之间的时间
我有一个简单的应用程序,可以打开 ZXing 的条形码扫描仪应用程序。
现在,我想知道完成一次扫描需要多少时间。基本上是从意图启动到获得结果的时间。现在,我知道这很简单,只需在执行意图时放置一个 nanoTime 对象,当我得到结果时放置另一个 nanoTime,将两者相减并相乘以秒/毫秒为单位。
但是,我有循环的意图,因为我想扫描一系列二维码,我认为 for 循环是最好的方法。
所以我有几个全局时间变量long start、end、time;
这是意图的代码:
这是获取输入的代码。
我注释掉了我启动计时器的部分,因为我不确定将它们放在哪里。发生的情况是,如果我在循环之前调用它,我只会得到一个结果,如果我把它放在循环内,我会得到多个彼此相距不远的结果。
如果仅调用一次,则获取意图完成所需的时间很容易,但如果在循环中多次调用它,则变得很棘手。
那么,有没有办法适当地花费意图打开并获得结果所需的时间?我愿意接受建议,即使这意味着重写我多次调用活动的方式(我目前正在使用循环)。
我还希望能够在扫描代码后立即获得时间,这样我就知道活动调用和活动结果之间的时间。我不想在每次通话完成之前等待每个通话完成。我要实时更新。谢谢。
java - 尝试测量插入在数据库中花费的时间
我有一个Multithreaded program
将插入到我的一个表中,并且我正在运行的程序是这样的-
java -jar CannedTest.jar 100 10000
意思是:
- 线程数是
100
- 任务数是
10000
所以每个线程都会插入10000 records
到我的表中。所以这意味着total count (100 * 10000)
表中应该是1,000,000
在程序完成执行之后。
作为我们的 LnP 测试的一部分,我正在尝试测量插入到我的表中的时间。我将所有这些数字存储在ConcurrentHashMap
插入数据库所需的时间中,如下所示。
当所有线程完成执行所有任务时,我尝试通过对其进行ConcurrentHashMap insertHistogram
排序来打印出数字,我得到如下结果 -Key
Milliseconds
而且,同样,ConcurrentHashMap insertHistogram
我尝试制作如下所示的直方图。
注意:- 我试图在其中插入记录的数据库,它Memory Only
目前处于模式。
问题陈述:-
看看我上面的结果中的这个数字,它通过在键上排序打印出来 -
0 2335
我不确定它怎么可能2335 calls
被插入0 milliseconds
?而且我System.nanotime
在测量刀片时也在使用。
以下是将打印出上述日志的代码 -
我不确定为什么0
当我尝试通过在键上排序直接从 Map 打印值时显示毫秒。
但是0 milliseconds
当我尝试将直方图制作成相同的logHistogramInfo method
.
我在上述方法的计算过程中做错了什么吗?
java - Guava 秒表类的优点是什么?
在 Google Guava 库中,有一个Stopwatch
类,它的文档说明了这一点 -
以纳秒为单位测量经过时间的对象。使用此类而不是直接调用来测量经过的时间很有用,
System.nanoTime()
原因如下:
- 出于测试或性能原因,可以替换一个备用时间源。
- 正如 所记录的
nanoTime
,返回的值没有绝对意义,只能解释为相对于 nanoTime 在不同时间返回的另一个时间戳。Stopwatch
是一种更有效的抽象,因为它只公开这些相对值,而不是绝对值。
问题 - 他们指的这个“备用时间源”是什么?JRE/JVM 是否也提供此选项?
java - 极其精确的重复/连续代码执行
在我的公司,我有一个程序必须通过 UDP 将一些数据发送到不受我们控制的远程系统。
数据必须每 7981859ns (=7.98 毫秒) +/- 0.001ms 发送一次。
可悲的是,如果我们传输数据太晚,旧版本的远程系统就会崩溃,如果我们传输太快/太早(实时数据生成),我们这边的数据就会用完。
目前,我们正在通过
如果我添加一些日志记录,我可以看到数据在 6ms - 11ms 之间发送,这对我们来说范围太大了。
我现在想知道如何优化它。
是否可以使用上次传输的纳米时间戳设置变量(如何获得?我只知道System.currentTimeMillis())
,更快地执行循环(或只是在循环中while(true)
),然后等到“currentNanoTime - lastNanoTime > 7981859 “在做之前send(..)
?
我的问题是我没有找到等待纳秒的方法,只有几毫秒。
python - 如何将纳秒的纪元时间转换为人类可读的?
我有一个以纳秒为单位的纪元时间戳 - 例如自 1970 年 1 月 11360287003083988472
日以来的纳秒。
Python 日期时间对象和转换方法仅支持毫秒精度。
有没有一种简单的方法可以将此纪元时间转换为人类可读的时间?