转载

Java中的currentTimeMillis和nanoTime

java中获取时间常用两种方法 System.currentTimeMillisSystem.nanoTime 。文档中,对这两个方法的使用场景做了明确指定。

System.currentTimeMilllis
System.nanoTime

从描述上看,做性能测试的话,还是用 System.nanoTime 方法更好些。

从实现上看,linux为例, System.currentTimeMilllis 的值直接取自于函数 gettimeofday 的值。虽然 gettimeofday 可以得到微秒的准度,但经过换算后,只能达到毫秒的准度了,符合 System.currentTimeMilllis 方法文档的描述。此外,若是手动修改的系统时间,则函数 gettimeofday 会返回过去的值,连带 System.currentTimeMilllis 方法也会如此。

另一方面, System.nanoTime 的利用高精度计时器来计算( -lrtlibrt.so.1 )时间流逝,准度可达纳秒,基于 monotonic clock 的特性,即便手动修改时间,函数也不会返回过去的值,同时这个特性注定了,该函数只能用来测量时间流逝,不能用来表示墙上时间。当然,如果系统不支持 monotonic clock ,还是会通过 gettimeofday 返回数值,此时准度退化为毫秒。

原文  http://blog.caoxudong.info/blog/2019/12/26/java_currentTimeMillis_nanoTime
正文到此结束
Loading...