【发布时间】:2016-11-26 06:33:26
【问题描述】:
System.nanoTime() 在编译相同的代码并针对 java 7 和 java 8 运行时返回不同的值。
这段代码:
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 上打印这个
~ 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 上
~ 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 Sierra。
【问题讨论】:
-
您如何确定这两个程序确实在同一时刻运行?
-
这个问题是主题性的,公式化的,包含代码。我不明白为什么它会被否决。
-
我应该更好地形成这个问题。我想知道为什么与 java 7 相比,java 8 上的 nanoTime 不准确。我更新了问题以包含 gdate 的输出。