System.currentTimeMillis vs System.nanoTime

问题:

准确度精度

我想知道的是在我的游戏中更新对象的位置时是否应该使用System.currentTimeMillis的()System.nanoTime()他们的运动变化与上次呼叫以来经过的时间成正比,我希望尽可能精确。
我已经看到,不同操作系统之间存在一些严重的时间分辨率问题(即Mac / Linux具有几乎1 ms的分辨率,而Windows具有50ms的分辨率)。我主要在Windows上运行我的应用程序,而50ms的分辨率似乎不太准确。
有没有更好的选择比我列出的两个?
任何建议/评论?

回答:

如果您只是寻找非常精确的经过时间测量,请使用System.nanoTime()System.currentTimeMillis()将为您提供自时代以来以毫秒为单位的最准确的可能经过时间,但System.nanoTime()相对于某个任意点可以提供毫微秒的精确时间。
从Java文档:

以纳秒为单位返回最精确的可用系统定时器的当前值。
该方法只能用于测量经过时间,与系统或挂钟时间的任何其他概念无关。返回的值表示纳秒,因为某些固定但任意的时间(可能在将来,所以值可能是负数)。该方法提供纳秒精度,但不一定是纳秒精度。不保证价值变化的频率。跨越大约292年(2 63纳秒)的连续呼叫的差异将不会准确地计算由于数字溢出而导致的经过时间。

例如,测量代码执行多长时间:

long startTime = System.nanoTime();    
// ... the code being measured ...    
long estimatedTime = System.nanoTime() - startTime;

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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: System.currentTimeMillis vs System.nanoTime

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

25 − 21 =