使用System.currentTimeMillis()
,我们可以在vms之间使用绝对时间,但System.nanoTime()
的文档说明The value returned represents nanoseconds since some fixed but arbitrary origin time...
。
如果我们可以精确地获得我们的jvm开始时间和这个纳米时间相对于的some fixed
点,我们可以获得与毫秒大致相同的绝对纳米时间,因为其他变量不会改变它的简单数学操作远离绝对的纳米时间。
absoluteNanoTime = vmStartTimeMS * 1000 + (System.nanoTime() - nanoStartPoint)
可以使用ManagementFactory.getRuntimeMXBean().getStartTime()
如何从JVM获取 nanoStartPoint ?
因此,简而言之,目标是使绝对纳米级的工作速度与System.nanoTime一样快(忽略几个周期来进行数学运算),而不是使用JNI来调用某些依赖OS的时钟。