当前位置:网站首页>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 !
边栏推荐
- Kotlin: collection use
- MongoDB数据日期显示相差8小时 原因和解决方案
- How do microservices aggregate API documents? This wave of show~
- Write a jison parser from scratch (5/10): a brief introduction to the working principle of jison parser syntax
- 法向量点云旋转
- How to display √ 2 on the command line terminal ̅? This is actually a blog's Unicode test article
- Exercise 9-4 finding books (20 points)
- Write a jison parser (7/10) from scratch: the iterative development process of the parser generator 'parser generator'
- Devop basic command
- 自动化的优点有哪些?
猜你喜欢

Hands on deep learning (38) -- realize RNN from scratch

Dynamic memory management

回复评论的sql

Hands on deep learning (46) -- attention mechanism

Histogram equalization

Intelligent gateway helps improve industrial data acquisition and utilization

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

Summary of small program performance optimization practice

Normal vector point cloud rotation

C # use ffmpeg for audio transcoding
随机推荐
Hands on deep learning (33) -- style transfer
Golang defer
查看CSDN个人资源下载明细
Dynamic memory management
Golang defer
7-17 crawling worms (15 points)
Exercise 7-8 converting strings to decimal integers (15 points)
Servlet基本原理与常见API方法的应用
华为联机对战如何提升玩家匹配成功几率
C # use gdi+ to add text with center rotation (arbitrary angle)
How can people not love the amazing design of XXL job
技术管理进阶——如何设计并跟进不同层级同学的绩效
leetcode1-3
H5 audio tag custom style modification and adding playback control events
Exercise 8-10 output student grades (20 points)
Golang type comparison
Lauchpad X | 模式
PHP book borrowing management system, with complete functions, supports user foreground management and background management, and supports the latest version of PHP 7 x. Database mysql
[FAQ] summary of common causes and solutions of Huawei account service error 907135701
Write a jison parser from scratch (1/10):jison, not JSON