当前位置:网站首页>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 !
边栏推荐
- Lauchpad x | MODE
- Press the button wizard to learn how to fight monsters - identify the map, run the map, enter the gang and identify NPC
- Kotlin:集合使用
- 基于线性函数近似的安全强化学习 Safe RL with Linear Function Approximation 翻译 1
- 转载:等比数列的求和公式,及其推导过程
- Baidu R & D suffered Waterloo on three sides: I was stunned by the interviewer's set of combination punches on the spot
- How web pages interact with applets
- Hands on deep learning (39) -- gating cycle unit Gru
- C # use gdi+ to add text with center rotation (arbitrary angle)
- Hands on deep learning (45) -- bundle search
猜你喜欢

Log cannot be recorded after log4net is deployed to the server

Svg image quoted from CodeChina

MATLAB小技巧(25)竞争神经网络与SOM神经网络

How web pages interact with applets

Qtreeview+ custom model implementation example

技术管理进阶——如何设计并跟进不同层级同学的绩效

Hands on deep learning (37) -- cyclic neural network

A little feeling
Web端自动化测试失败原因汇总

C语言指针面试题——第二弹
随机推荐
Hands on deep learning (38) -- realize RNN from scratch
Batch distribution of SSH keys and batch execution of ansible
`Example of mask ` tool use
回复评论的sql
法向量点云旋转
Write a jison parser from scratch (6/10): parse, not define syntax
2021-08-11 function pointer
品牌连锁店5G/4G无线组网方案
Work order management system OTRs
MySQL develops small mall management system
Sort out the power node, Mr. Wang he's SSM integration steps
How to teach yourself to learn programming
Hands on deep learning (III) -- Torch Operation (sorting out documents in detail)
有老师知道 继承RichSourceFunction自定义读mysql怎么做增量吗?
xxl-job惊艳的设计,怎能叫人不爱
Exercise 7-3 store the numbers in the array in reverse order (20 points)
PHP代码审计3—系统重装漏洞
Get the source code in the mask with the help of shims
AUTOSAR从入门到精通100讲(106)-域控制器中的SOA
C # use gdi+ to add text to the picture and make the text adaptive to the rectangular area