java在没有JNI的情况下获得绝对纳米时间
有了System.currentTimeMillis()
,我们就有了可以跨虚拟机使用的绝对时间,但有了System.nanoTime()
,正如它的文档所说The value returned represents nanoseconds since some fixed but arbitrary origin time...
如果我们能够准确地得到jvm的开始时间和纳米时间相对于的这个some fixed
点,我们可以得到绝对纳米时间,速度与毫秒差不多,因为其他变量不会改变它的简单数学运算,而不是绝对纳米时间
absoluteNanoTime = vmStartTimeMS * 1000 + (System.nanoTime() - nanoStartPoint)
vm的开始时间可以通过ManagementFactory.getRuntimeMXBean().getStartTime()
找到
如何从JVM获取纳米起点
所以简而言之,我们的目标是让绝对纳米时间和系统一样快。nanoTime(忽略几个周期进行计算),不使用JNI调用一些依赖操作系统的时钟
共 (0) 个答案