问题标签 [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 - System.nanoTime() 完全没用吗?
正如博文Beware of System.nanoTime() in Java 中所述,在 x86 系统上,Java 的 System.nanoTime() 使用CPU特定的计数器返回时间值。现在考虑以下我用来测量通话时间的案例:
现在在多核系统中,可能是在测量time1之后,线程被调度到另一个处理器,其计数器小于前一个CPU的计数器。因此,我们可以在 time2 中得到一个小于time1 的值。因此,我们会在 timeSpent 中得到一个负值。
考虑到这种情况,是不是 System.nanotime 现在几乎没用了?
我知道更改系统时间不会影响纳米时间。这不是我上面描述的问题。问题是每个 CPU 将保持不同的计数器,因为它被打开。与第一个 CPU 相比,第二个 CPU 上的此计数器可能更低。由于线程可以在获取time1后被操作系统调度到第二个CPU,所以timeSpent的值可能不正确,甚至是负数。
java - strace java小程序
我正在尝试 strace 一个 java 小程序,并且 strace 似乎没有工作。我正在调用以下函数。
在调用上述消息之前,我从 strace 获得以下输出,然后从 strace 中没有任何输出:
一旦我开始从该方法获取日志输出,我就不再从 strace 中得到什么了。我对 strace 很陌生。关于发生了什么的任何线索?可以跟踪小程序吗?
c# - .NET 中的 System.nanoTime() 等价于什么?
标题几乎是不言自明的,我正在为这种简单性而自杀。
看这里,但它没有多大帮助。
java - System.nanotime 运行缓慢?
我的一个朋友向我展示了他所做的一些事情,我很难解释这是怎么发生的:他正在使用 System.nanotime 来计时,它每秒钟都会给用户一个更新来告诉用户有多少时间已经过去了(这部分是 Thread.sleep(1000) ),而且似乎很长时间(等待 10 秒的东西大约需要 3 分钟才能完成)。我们尝试使用毫秒来查看经过了多少时间:它打印出每秒经过了多少纳米时间,我们看到每一秒,纳米时间每秒移动大约 40-50 毫秒。
我检查了与 System.nanotime 和 Java 相关的错误,但似乎我能找到的唯一事情涉及 nanotime 突然大幅增加然后停止。我还根据我在另一个问题中阅读的内容浏览了此博客条目,但没有任何可能导致它的内容。
显然,这可以通过只使用毫秒来解决这种情况;有很多解决方法,但我很好奇的是,除了系统时钟的硬件问题或至少 CPU 拥有的最准确时钟之外是否还有其他问题(因为这就是 System.nanotime 似乎使用的)这可能会导致它像这样一直缓慢运行?
secondsNano 会打印出 0.04 的数值,而 secondsMili 会打印出非常接近 1 的数值。
看起来Sun 的错误数据库中已经报告了沿着这条线的错误,但他们将其作为副本关闭,但他们的链接没有指向现有错误。它似乎是特定于系统的,所以我越来越确定这是一个硬件问题。
java - System.nanoTime() 跨线程是否一致?
我想以纳秒为单位计算两个事件之间经过的时间。为此,我可以使用这里System.nanoTime()
提到的。问题是这两个事件发生在不同的线程中。
由于nanoTime()
不返回绝对时间戳,而是只能用于计算时间差,我想知道我在两个不同线程上得到的值是否与两个事件之间经过的物理时间一致。
java - 为什么我的 System.nanoTime() 坏了?
我和我的另一位开发人员最近从工作中的 Core 2 Duo 机器转移到了新的 Core 2 Quad 9505;两者都运行带有 JDK 1.6.0_18 的 Windows XP SP3 32 位。
这样做后,我们对一些计时/统计/指标聚合代码的一些自动化单元测试立即开始失败,因为从 System.nanoTime() 返回的值似乎很荒谬。
在我的机器上可靠地显示这种行为的测试代码是:
典型输出:
运行 100 倍会产生实际睡眠时间的 33% 到 60% 之间的纳米结果;不过通常在 40% 左右。
我了解 Windows 中计时器准确性的弱点,并已阅读相关线程,例如System.nanoTime() 跨线程是否一致?,但是我的理解是 System.nanoTime() 正是为了我们使用它的目的而设计的:-测量经过的时间;比 currentTimeMillis() 更准确。
有谁知道为什么它会返回如此疯狂的结果?这可能是硬件架构问题(唯一改变的主要是这台机器上的 CPU/主板)?我当前的硬件存在 Windows HAL 问题?JDK问题?我应该放弃 nanoTime() 吗?我应该在某处记录错误,还是对如何进一步调查提出任何建议?
更新 19/07 03:15 UTC:在尝试了下面 finnw 的测试用例后,我做了一些谷歌搜索,遇到了诸如bugid:6440250 之类的条目。这也让我想起了周五晚些时候我注意到的其他一些奇怪的行为,其中 ping 恢复为负数。所以我将/usepmtimer添加到我的 boot.ini 中,现在所有测试都按预期运行。我的 ping 也正常。
不过,我对为什么这仍然是一个问题感到有些困惑;根据我的阅读,我认为 TSC 与 PMT 的问题在 Windows XP SP3 中得到了很大的解决。可能是因为我的机器原本是 SP2 的,并且被修补到 SP3 而不是最初安装为 SP3 吗?我现在也想知道我是否应该安装像MS KB896256这样的补丁。也许我应该与公司桌面构建团队一起讨论这个问题?
java - 如何从减去 2 个 nanoTime 对象中获得有意义的结果?
我创建了一个过滤器来监控请求的长度。
我现在如何从中获得毫秒数?
php - 如何以纳秒精度获得 PHP 时间?
这在PHP中甚至可能吗?
如果不是,可用的最高精度是多少?
java - 纳秒到毫秒和纳秒 < 999999 在 Java 中的转换
我想知道将大纳秒值转换为毫秒和纳秒的最准确方法是什么,纳秒上限为 999999。目标是结合纳秒和毫秒值以确保最大分辨率可能与限制给定的。这是为了与睡眠/等待方法和其他一些给出大纳秒值的外部库进行比较。
编辑:我的代码现在如下所示:
干杯,克里斯
java - 使用 asm Instrumantation 测量 java 程序运行时
我想知道是否有一种方法可以使用 asm 的 java 字节码检测来测量给定的字节码(类文件,在原始代码中具有 main 函数)运行时。
测量应该尽可能准确,如果可能的话,以纳秒为单位。
谢谢