当前位置:网站首页>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 !
边栏推荐
- Get the source code in the mask with the help of shims
- Baidu R & D suffered Waterloo on three sides: I was stunned by the interviewer's set of combination punches on the spot
- 对于程序员来说,伤害力度最大的话。。。
- Check 15 developer tools of Alibaba
- JDBC and MySQL database
- 什么是 DevSecOps?2022 年的定义、流程、框架和最佳实践
- System. Currenttimemillis() and system Nanotime (), which is faster? Don't use it wrong!
- SQL replying to comments
- Web端自动化测试失败原因汇总
- Summary of reasons for web side automation test failure
猜你喜欢
Web端自动化测试失败原因汇总
Summary of small program performance optimization practice
C # use gdi+ to add text with center rotation (arbitrary angle)
Log cannot be recorded after log4net is deployed to the server
基于线性函数近似的安全强化学习 Safe RL with Linear Function Approximation 翻译 1
C语言指针经典面试题——第一弹
Fabric of kubernetes CNI plug-in
C # use gdi+ to add text to the picture and make the text adaptive to the rectangular area
libmysqlclient.so.20: cannot open shared object file: No such file or directory
华为联机对战如何提升玩家匹配成功几率
随机推荐
【Day2】 convolutional-neural-networks
Write a jison parser from scratch (1/10):jison, not JSON
Dynamic address book
Hands on deep learning (46) -- attention mechanism
Summary of reasons for web side automation test failure
Summary of small program performance optimization practice
Hands on deep learning (39) -- gating cycle unit Gru
Hands on deep learning (37) -- cyclic neural network
Hands on deep learning (III) -- Torch Operation (sorting out documents in detail)
`Example of mask ` tool use
Write a jison parser from scratch (6/10): parse, not define syntax
Golang Modules
5g/4g wireless networking scheme for brand chain stores
Hands on deep learning (36) -- language model and data set
Hands on deep learning (41) -- Deep recurrent neural network (deep RNN)
Deep learning 500 questions
2021-08-11 function pointer
按键精灵跑商学习-商品数量、价格提醒、判断背包
C # use gdi+ to add text with center rotation (arbitrary angle)
Kotlin:集合使用