当前位置:网站首页>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 !
边栏推荐
- In the case of easyUI DataGrid paging, click the small triangle icon in the header to reorder all the data in the database
- 六月份阶段性大总结之Doris/Clickhouse/Hudi一网打尽
- Kotlin 集合操作汇总
- Hands on deep learning (40) -- short and long term memory network (LSTM)
- How can Huawei online match improve the success rate of player matching
- 【OpenCV 例程200篇】218. 多行倾斜文字水印
- Lauchpad x | MODE
- Kotlin: collection use
- Hands on deep learning (46) -- attention mechanism
- Hands on deep learning (39) -- gating cycle unit Gru
猜你喜欢
技术管理进阶——如何设计并跟进不同层级同学的绩效
Svg image quoted from CodeChina
百度研发三面惨遭滑铁卢:面试官一套组合拳让我当场懵逼
直方图均衡化
H5 audio tag custom style modification and adding playback control events
pcl::fromROSMsg报警告Failed to find match for field ‘intensity‘.
PHP code audit 3 - system reload vulnerability
ASP. Net to access directory files outside the project website
Baidu R & D suffered Waterloo on three sides: I was stunned by the interviewer's set of combination punches on the spot
How do microservices aggregate API documents? This wave of show~
随机推荐
SQL replying to comments
转载:等比数列的求和公式,及其推导过程
leetcode1-3
Lavel document reading notes -how to use @auth and @guest directives in lavel
`Example of mask ` tool use
Pueue data migration from '0.4.0' to '0.5.0' versions
Golang defer
Hands on deep learning (32) -- fully connected convolutional neural network FCN
Write a jison parser from scratch (3/10): a good beginning is half the success -- "politics" (Aristotle)
In the case of easyUI DataGrid paging, click the small triangle icon in the header to reorder all the data in the database
PHP is used to add, modify and delete movie information, which is divided into foreground management and background management. Foreground users can browse information and post messages, and backgroun
Golang type comparison
对于程序员来说,伤害力度最大的话。。。
Some summaries of the third anniversary of joining Ping An in China
MySQL transaction mvcc principle
技术管理进阶——如何设计并跟进不同层级同学的绩效
Hands on deep learning (40) -- short and long term memory network (LSTM)
5g/4g wireless networking scheme for brand chain stores
el-table单选并隐藏全选框
How to teach yourself to learn programming