2012-04-05 223 views
0

我在我的应用程序中使用system.nanoTime,并计算相对于启动时间的时间。
我的应用程序运行得非常好,直到我将它复制到新计算机上,并且纳米时间给了我更慢的值。java - system.nanoTime()运行速度太慢

我写了一个简单的应用程序来确保。
将纳秒时间与系统时间进行比较。
它显示除了我的新计算机以外的其他计算机中的相同值。有什么建议么?

这里是我的代码: 首先我

private long initNanoTime = System.nanoTime(); 
private long initTime = System.currentTimeMillis(); 

比我循环运行每秒线程:

long timeUsingNanoTime = initTime + (System.nanoTime() - initNanoTime)/1000000; 
long timeUsingMilis = System.currentTimeMillis(); 
long nanotimeOffset = Math.abs(timeUsingNanoTime - timeUsingMilis); 
if (nanotimeOffset < 100l) ? print("close") : print(far); 

编辑:我使用的纳米,因为我需要处理甚至TS在纳米时间内发生,并将其接收到的纳米时间打印到日志中

+1

你是什么意思“给我慢的值”。方法执行是否需要更多时间,或者您获得了您不期望的值?也许这可以帮助你http://stackoverflow.com/questions/351565/system-currenttimemillis-vs-system-nanotime – SWoeste 2012-04-05 10:28:24

回答

6

这就像Java API文档所说的关于System.nanoTime()

此方法只能用于测量已用时间,而不是与系统或挂钟时间的任何其他概念相关的 。返回的值 表示自一些固定但任意的起点 时间(可能在未来,因此值可能为负)后的纳秒。该方法的所有调用在 Java虚拟机的实例中都使用相同的 源;其他虚拟机实例可能会使用不同的来源。

此方法提供纳秒的精度,但不一定 纳秒级分辨率(即频率变化值) - 没有 担保除了分辨率至少不如 说的currentTimeMillis()的制作。

它不提供与时间戳(currentTimeMillis)的任何耦合,并且不提供固定分辨率。

在你的情况看来,Java现在有一个比以前更高的分辨率定时器,因此不需要使用系统时间。

+0

是比6和5版本的nanotime更可靠http://docs.oracle.com/javase /6/docs/api/java/lang/System.html#nanoTime%28%29 – Jeb 2012-04-05 10:47:39

+0

他们都说基本相同。两者都声明'nanoTime'没有耦合到任何特定的原点,所以你不能依赖它。他们只是在Java7文档中添加了更多的解释。 – Neet 2012-04-05 10:49:47