【发布时间】:2016-01-04 17:10:54
【问题描述】:
方法System.currentTimeMillis()是否实现了对底层操作系统进行系统调用以接收当前时间?
我问,因为据我所知,该方法运行得非常快,并且只需要 6 个 CPU 时钟,但这没有意义,因为已知系统调用很慢。
我在这里错过了什么?
【问题讨论】:
标签: time jvm system-calls
方法System.currentTimeMillis()是否实现了对底层操作系统进行系统调用以接收当前时间?
我问,因为据我所知,该方法运行得非常快,并且只需要 6 个 CPU 时钟,但这没有意义,因为已知系统调用很慢。
我在这里错过了什么?
【问题讨论】:
标签: time jvm system-calls
System.currentTimeMillis() 通常不需要切换到内核模式。 OS 提供了一种机制,允许通过将相应的内核页面直接映射到应用程序地址空间来从用户模式读取当前时间。
例如Oracle JDK 和 OpenJDK 在 Linux 上实现 System.currentTimeMillis() 调用 glibc gettimeofday 函数。此调用通过vDSO 直接从用户空间访问内核数据。
【讨论】: