首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.nanoTime()在java 7和java 8之间返回不同的值

System.nanoTime()在java 7和java 8之间返回不同的值
EN

Stack Overflow用户
提问于 2016-11-26 06:33:26
回答 1查看 929关注 0票数 2

当编译相同的代码并在java 7和java 8上运行时,System.nanoTime()返回不同的值。

这段代码:

代码语言:javascript
复制
public class nanoTime
{
    public static void main(String... args)
    {
      System.out.println("Found JVM: "
          + " " + System.getProperty("java.vm.vendor")
          + " " + System.getProperty("java.version")
          + " " + System.getProperty("java.vm.name")
          );
      System.out.println("time is "+ System.nanoTime());
    }
}

在java 7上打印这个

代码语言:javascript
复制
~ gdate +%s%N && javac7-oraclejdk nanoTime.java && java7-oraclejdk nanoTime
1480143769271605000
Found JVM:  Oracle Corporation 1.7.0_80 Java HotSpot(TM) 64-Bit Server VM
time is 1480143769807547000

而这个在java 8上

代码语言:javascript
复制
~ gdate +%s%N && javac nanoTime.java && java nanoTime
1480143724152650000
Found JVM:  Oracle Corporation 1.8.0_92 Java HotSpot(TM) 64-Bit Server VM
time is 527819867675375

为什么和如何发生这种情况?

运行时环境是Mac塞拉利昂。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-26 06:36:55

System.nanoTime() javadoc说,

在Java虚拟机的实例中,此方法的所有调用都使用相同的起源;其他虚拟机实例可能使用不同的起源。

只有在计算在Java虚拟机的同一实例中获得的两个此类值之间的差异时,此方法返回的值才具有意义。

您正在比较不同JVM实例的结果(以及不同的起源和版本)。这是没有意义的。只要保持API中指定的行为,Java版本之间更改实现是完全合法的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40815674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档