当前位置:网站首页>System. Currenttimemillis() and system Nanotime (), which is faster? Don't use it wrong!
System. Currenttimemillis() and system Nanotime (), which is faster? Don't use it wrong!
2022-07-04 16:36:00 【Java technology stack】
author : A fabricated belief
source :https://segmentfault.com/a/1190000041276485
Java There are two ways to get a timestamp :System.currentTimeMillis()
and System.nanoTime()
, Their usage scenarios are different , At present, some articles on the Internet have some one-sided descriptions about the performance of these two methods , This article hopes to give a simple final answer .
System.currentTimeMillis() There are performance issues ?
The answer is No . The performance difference between the two methods depends on the operating system .
Windows:
stay Windows Next ,System.currentTimeMillis()
Than System.nanoTime()
Much faster , This is because Windows The system only provides a cache variable for the former , The latter is to get the count from the bottom of the hardware in real time .
So if your production environment is Windows, Please avoid using
System.nanoTime()
.
Linux:
stay Linux Next , There is little difference in the execution time between the two , Whether it's single threaded or multi-threaded .
Different virtual machine implementations can lead to performance differences
Today's cloud hosts mainly include Xen and KVM Two ways of implementation , Some articles on the Internet found that they have performance differences in taking system time .
When your virtual machine uses Xen when , Taking time will be KVM More than ten times . However, the above also provides solutions to such problems .
You need to write a special class to improve System.currentTimeMillis() Performance ?
Unwanted . That's painting a snake to add feet .
My test code
My test code is as follows , Without any dependency , It can be used directly javac Compile and run . Readers who are interested can try :
import java.util.ArrayList;import java.util.List;import java.util.function.Consumer;public class TimePerformance { public static final int LOOP_COUNT = 9999999; 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<Runnable> testing = test -> { System.out.println("Single thread test:"); test.run(); System.out.println(THREAD_COUNT + " threads test:"); List<Thread> threads = new ArrayList<>(); for (int i = 0; i < THREAD_COUNT; i++) { Thread t = new Thread(test); t.start(); threads.add(t); } // Wait for all threads to finish threads.forEach(thread -> { try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } }); }; System.out.println("//// Test System.nanoTime()"); testing.accept(nanoTest); System.out.println("//// Test System.currentTimeMillis()"); testing.accept(millisTest); }}
Because I'm using Windows, So in the execution output System.nanoTime()
Obviously very slow .
I won't release the specific output content , Because it has no reference value , Most production environments use Linux.
Recent hot article recommends :
1.1,000+ Avenue Java Arrangement of interview questions and answers (2022 The latest version )
2. Explode !Java Xie Cheng is coming ...
3.Spring Boot 2.x course , It's too complete !
4. Don't write about the explosion on the screen , Try decorator mode , This is the elegant way !!
5.《Java Development Manual ( Song Mountain version )》 The latest release , Download it quickly !
I think it's good , Don't forget to like it + Forward !
边栏推荐
- Scientific research cartoon | what else to do after connecting with the subjects?
- Application and Optimization Practice of redis in vivo push platform
- Stress, anxiety or depression? Correct diagnosis and retreatment
- Salient map drawing based on OpenCV
- 函數式接口,方法引用,Lambda實現的List集合排序小工具
- Go deep into the details of deconstruction and assignment of several data types in JS
- Final consistency of MESI cache in CPU -- why does CPU need cache
- Recommend 10 excellent mongodb GUI tools
- Vscode setting outline shortcut keys to improve efficiency
- AI system content recommendation issue 24
猜你喜欢
Communication mode based on stm32f1 single chip microcomputer
Preliminary practice of niuke.com (10)
Principle and general steps of SQL injection
DIY a low-cost multi-functional dot matrix clock!
AI system content recommendation issue 24
Common knowledge of unity Editor Extension
Audio and video technology development weekly | 252
MFC implementation of ACM basic questions encoded by the number of characters
[North Asia data recovery] a database data recovery case where the partition where the database is located is unrecognized due to the RAID disk failure of HP DL380 server
[hcie TAC] question 5 - 1
随机推荐
Preliminary practice of niuke.com (10)
China's roof ladder market trend report, technological innovation and market forecast
多年锤炼,迈向Kata 3.0 !走进开箱即用的安全容器体验之旅| 龙蜥技术
Functional interface, method reference, list collection sorting gadget implemented by lambda
Function test - knowledge points and common interview questions
Research Report of exoskeleton robot industry - market status analysis and development prospect prediction
What should ABAP do when it calls a third-party API and encounters garbled code?
Lv166 turned over
Review of Weibo hot search in 2021 and analysis of hot search in the beginning of the year
What is the catalog of SAP commerce cloud
Research Report on market supply and demand and strategy of China's Sodium Tetraphenylborate (cas+143-66-8) industry
What encryption algorithm is used for the master password of odoo database?
[North Asia data recovery] data recovery case of database data loss caused by HP DL380 server RAID disk failure
时钟轮在 RPC 中的应用
After the eruption of Tonga volcano, we analyzed the global volcanic distribution and found that the area with the most volcanoes is here!
Neuf tendances et priorités du DPI en 2022
Qt---error: ‘QObject‘ is an ambiguous base of ‘MyView‘
Variable cannot have type 'void'
[Chongqing Guangdong education] National Open University spring 2019 1396 pharmaceutical administration and regulations (version) reference questions
165 webmaster online toolbox website source code / hare online tool system v2.2.7 Chinese version