当前位置:网站首页>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 !
边栏推荐
- Some fields of the crawler that should be output in Chinese are output as none
- Nine CIO trends and priorities in 2022
- What does IOT engineering learn and work for?
- After the eruption of Tonga volcano, we analyzed the global volcanic distribution and found that the area with the most volcanoes is here!
- Find numbers
- ECCV 2022放榜了:1629篇论文中选,录用率不到20%
- How was MP3 born?
- The four most common errors when using pytorch
- [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
- MySQL learning notes - data type (2)
猜你喜欢
Model fusion -- stacking principle and Implementation
Application of clock wheel in RPC
Function test - knowledge points and common interview questions
QT graphical view frame: element movement
Web components series - detailed slides
What should ABAP do when it calls a third-party API and encounters garbled code?
~88 running people practice
Understand the rate control mode rate control mode CBR, VBR, CRF (x264, x265, VPX)
Stress, anxiety or depression? Correct diagnosis and retreatment
165 webmaster online toolbox website source code / hare online tool system v2.2.7 Chinese version
随机推荐
Application and Optimization Practice of redis in vivo push platform
Expression #1 of ORDER BY clause is not in SELECT list, references column ‘d.dept_ no‘ which is not i
Web components series - detailed slides
Change the mouse pointer on ngclick - change the mouse pointer on ngclick
Communication mode based on stm32f1 single chip microcomputer
What is the catalog of SAP commerce cloud
Actual combat | use composite material 3 in application
Preliminary practice of niuke.com (10)
Market trend report, technical innovation and market forecast of China's hair repair therapeutic apparatus
[hcie TAC] question 5 - 1
Explore mongodb - mongodb compass installation, configuration and usage introduction | mongodb GUI
Essential basic knowledge of digital image processing
What encryption algorithm is used for the master password of odoo database?
Working group and domain analysis of Intranet
[book club issue 13] packaging format and coding format of audio files
How can floating point numbers be compared with 0?
Find numbers
Intranet penetrating FRP: hidden communication tunnel technology
JS to realize the countdown function
Hair and fuzz interceptor Industry Research Report - market status analysis and development prospect forecast