当前位置:网站首页>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 10:08: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 !
边栏推荐
- JDBC and MySQL database
- Dynamic memory management
- Hands on deep learning (32) -- fully connected convolutional neural network FCN
- How to teach yourself to learn programming
- lolcat
- Hands on deep learning (37) -- cyclic neural network
- How do microservices aggregate API documents? This wave of show~
- Golang defer
- uniapp 处理过去时间对比现在时间的时间差 如刚刚、几分钟前,几小时前,几个月前
- Write a jison parser from scratch (6/10): parse, not define syntax
猜你喜欢

uniapp 处理过去时间对比现在时间的时间差 如刚刚、几分钟前,几小时前,几个月前

Hands on deep learning (43) -- machine translation and its data construction

华为联机对战如何提升玩家匹配成功几率

C语言指针经典面试题——第一弹

用数据告诉你高考最难的省份是哪里!

C language pointer interview question - the second bullet

Hands on deep learning (42) -- bi-directional recurrent neural network (BI RNN)

leetcode1-3

libmysqlclient.so.20: cannot open shared object file: No such file or directory

MySQL develops small mall management system
随机推荐
H5 audio tag custom style modification and adding playback control events
Kotlin:集合使用
Hands on deep learning (46) -- attention mechanism
Fabric of kubernetes CNI plug-in
C # use gdi+ to add text to the picture and make the text adaptive to the rectangular area
How web pages interact with applets
Some summaries of the third anniversary of joining Ping An in China
Svg image quoted from CodeChina
Kubernetes CNI 插件之Fabric
Dynamic address book
对于程序员来说,伤害力度最大的话。。。
Hands on deep learning (40) -- short and long term memory network (LSTM)
Implementing expired localstorage cache with lazy deletion and scheduled deletion
Golang defer
Hands on deep learning (III) -- Torch Operation (sorting out documents in detail)
PHP code audit 3 - system reload vulnerability
Exercise 9-1 time conversion (15 points)
Exercise 9-3 plane vector addition (15 points)
Regular expression (I)
Hands on deep learning (35) -- text preprocessing (NLP)