关于java 获取时间戳的方法-亚博电竞手机版
java有两个取时间戳的方法:system.currenttimemillis()
和system.nanotime()
,它们的使用场景是有区别的,当前网上一些文章对于这两个方法的性能讨论存在一些片面的描述,本文希望能给出一个简单的最终答案。
system.currenttimemillis() 存在性能问题?
答案是否定的。
这两个方法性能差异取决于操作系统。
windows:
在 windows 下,system.currenttimemillis()
比system.nanotime()
要快很多,这是因为 windows 系统为前者提供的只是一个缓存变量,而后者则是实时的去硬件底层获取计数。
- 参考
所以如果你的生产环境是 windows,请尽可能避免使用 system.nanotime()。
linux:
在 linux 下,两者的执行耗时相差不大,不论是单线程还是多线程。
不同的虚拟机实现会带来性能差异
如今的云主机主要有 xen 和 kvm 两种实现方式,网上有文章发现 public static final int thread_count = 30; public static void main(string[] args) { runnable millistest = () -> { long start = system.currenttimemillis(); for (int i = 0; i < loop_count; i ) { system.currenttimemillis(); } long end = system.currenttimemillis(); system.out.printf("%s : %f ns per call\n", thread.currentthread().getname(), ((double)end - start) * 1000000 / loop_count); }; runnable nanotest = () -> { long start = system.currenttimemillis(); for (int i = 0; i < loop_count; i ) { system.nanotime(); } long end = system.currenttimemillis(); system.out.printf("%s : %f ns per call\n", thread.currentthread().getname(), ((double)end - start) * 1000000 / loop_count); }; consumer
因为我用的是 windows,所以执行输出当中system.nanotime()
明显非常慢。具体输出内容我就不放出来了,因为不具有参考价值,大多数生产环境用的是 linux。
到此这篇关于关于java 获取时间戳的方法的文章就介绍到这了,更多相关java 获取时间戳内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!