System.currentTimeMillis vs System.nanoTime

精度与精度之比

我想知道的是,在更新游戏中对象的位置时,我是应该使用System.currentTimeMillis()还是System.nanoTime()?它们的运动变化与上次通话后经过的时间成正比,我希望尽可能精确

我曾读到不同操作系统之间存在一些严重的时间分辨率问题(即Mac/Linux的分辨率几乎为1ms,而Windows的分辨率为50ms??)。我主要是在windows上运行我的应用程序,50毫秒的分辨率似乎很不准确

有比我列出的两个更好的选择吗

有什么建议/意见吗

如果您只是在寻找非常精确的经过时间测量值,请使用System.nanoTime()System.currentTimeMillis()将以毫秒为单位提供自历元以来最精确的运行时间,但是System.nanoTime()将提供相对于某个任意点的纳秒精确时间

从Java文档中:

公共静态长时间()

返回最精确的可用系统计时器的当前值(以纳秒为单位)

此方法只能用于
测量经过的时间,而不是
与系统的任何其他概念相关
或者挂钟时间。返回的值
表示自某些
固定但任意的原点时间(可能在
因此,价值观可能是
否定)。此方法提供
纳秒精度,但不是
必须是纳秒精度。不
保证如何进行
值经常变化。分歧
在跨度更大的连续调用中
大约292年(263
纳秒)将不准确
计算由于数值原因而经过的时间
溢出

例如,要测量某些代码执行所需的时间:

long startTime=System.nanoTime();
// ... 正在测量的代码。。。
long-estimatedTime=System.nanoTime()-startTime;

另请参见:JavaDoc System.nanoTime()JavaDoc System.currentTimeMillis()了解更多信息

发表评论