Java有两种时间戳方法:System.currentTimeMillis()和System.nanoTime(),它们的使用场景不同。该方法的性能讨论中存在一些片面的描述,本文希望能给出一个简单的最终答案。System.currentTimeMillis()是否有性能问题?答案是否定的。这两种方法之间的性能差异取决于操作系统。Windows:在Windows下,System.currentTimeMillis()比System.nanoTime()快很多,因为Windows系统只为前者提供一个缓存变量,而后者是实时从底层硬件获取计数。参考1:https://stackoverflow.com/a/5...参考2:http://stas-blogspot.blogspot...所以如果您的生产环境是Windows,请避免使用System.nanoTime()。Linux:在Linux下,无论是单线程还是多线程,两者的执行时间相差不大。不同的虚拟机实现会带来性能差异。现在的云主机主要有两种实现方式:Xen和KVM。网上一篇文章发现,它们在占用系统时间方面存在性能差异。文章地址:https://www.javaadvent.com/20...当你的虚拟机使用Xen时,fetch时间会是KVM的十倍以上。但是,上面也提供了如何解决此类问题的解决方案。需要编写专门的类来提高System.currentTimeMillis()的性能吗?不必要。那是多余的。我的测试代码我的测试代码如下,没有任何依赖,直接用javac编译运行即可。读者有兴趣可以试试:importjava.util.ArrayList;importjava.util.List;importjava.util.function.Consumer;publicclassTimePerformance{publicstaticfinalintLOOP_COUNT=9999999;publicstaticfinalintTHREAD_COUNT=30;publicstaticvoidmain(String[]args){RunnablemillisTest=()->{longstart=System.currentTimeMillis();for(inti=0;i
