欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于Java?獲取時(shí)間戳的方法

 更新時(shí)間:2022年04月19日 16:36:15   作者:程序員的成長(zhǎng)之路  
這篇文章主要介紹了關(guān)于Java獲取時(shí)間戳的方法,Java有兩個(gè)取時(shí)間戳的方法,分別是System.currentTimeMillis()和System.nanoTime()下文對(duì)兩種方法進(jìn)行詳細(xì)介紹,需要的小伙伴可以參考一下

Java有兩個(gè)取時(shí)間戳的方法:System.currentTimeMillis()System.nanoTime(),它們的使用場(chǎng)景是有區(qū)別的,當(dāng)前網(wǎng)上一些文章對(duì)于這兩個(gè)方法的性能討論存在一些片面的描述,本文希望能給出一個(gè)簡(jiǎn)單的最終答案。

System.currentTimeMillis() 存在性能問(wèn)題?

答案是否定的。

這兩個(gè)方法性能差異取決于操作系統(tǒng)。

Windows:

在 Windows 下,System.currentTimeMillis() System.nanoTime() 要快很多,這是因?yàn)?Windows 系統(tǒng)為前者提供的只是一個(gè)緩存變量,而后者則是實(shí)時(shí)的去硬件底層獲取計(jì)數(shù)。

所以如果你的生產(chǎn)環(huán)境是 Windows,請(qǐng)盡可能避免使用 System.nanoTime()。

Linux:

在 Linux 下,兩者的執(zhí)行耗時(shí)相差不大,不論是單線程還是多線程。

不同的虛擬機(jī)實(shí)現(xiàn)會(huì)帶來(lái)性能差異

如今的云主機(jī)主要有 Xen 和 KVM 兩種實(shí)現(xiàn)方式,網(wǎng)上有文章發(fā)現(xiàn)它們?cè)谌∠到y(tǒng)時(shí)間方面存在性能差異。

當(dāng)我們的虛擬機(jī)用的是 Xen 時(shí),取時(shí)間的耗時(shí)會(huì)是 KVM 的十倍以上。不過(guò)上文也提供了遇到此類問(wèn)題該如何解決的方案。

需要寫一個(gè)專門的類來(lái)提升 System.currentTimeMillis() 性能嗎?

不需要。那屬于畫蛇添足。

我的測(cè)試代碼

我的測(cè)試代碼如下,沒(méi)有任何依賴,可以直接用 javac 編譯然后運(yùn)行。讀者有興趣可以試試。

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);
}
}

因?yàn)槲矣玫氖?Windows,所以執(zhí)行輸出當(dāng)中System.nanoTime() 明顯非常慢。具體輸出內(nèi)容我就不放出來(lái)了,因?yàn)椴痪哂袇⒖純r(jià)值,大多數(shù)生產(chǎn)環(huán)境用的是 Linux。

到此這篇關(guān)于關(guān)于Java 獲取時(shí)間戳的方法的文章就介紹到這了,更多相關(guān)Java 獲取時(shí)間戳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java設(shè)計(jì)模式筆記之適配器模式

    java設(shè)計(jì)模式筆記之適配器模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之適配器模式筆記,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 教你用Java Swing實(shí)現(xiàn)自助取款機(jī)系統(tǒng)

    教你用Java Swing實(shí)現(xiàn)自助取款機(jī)系統(tǒng)

    今天給大家?guī)?lái)的是關(guān)于JAVA的相關(guān)知識(shí),文章圍繞著如何用Java Swing實(shí)現(xiàn)自助取款機(jī)系統(tǒng)展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • feign開啟日志Logger.Level?feignLoggerLevel()中Level爆紅的解決

    feign開啟日志Logger.Level?feignLoggerLevel()中Level爆紅的解決

    這篇文章主要介紹了feign開啟日志Logger.Level?feignLoggerLevel()中Level爆紅的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java冒泡排序的定義與實(shí)例代碼

    Java冒泡排序的定義與實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Java冒泡排序的定義與實(shí)例的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • jvm垃圾回收GC調(diào)優(yōu)基礎(chǔ)原理分析

    jvm垃圾回收GC調(diào)優(yōu)基礎(chǔ)原理分析

    談到調(diào)優(yōu),這一定是針對(duì)特定場(chǎng)景、特定目的的事情, 對(duì)于 GC 調(diào)優(yōu)來(lái)說(shuō),首先就需要清楚調(diào)優(yōu)的目標(biāo)是什么?從性能的角度看,通常關(guān)注三個(gè)方面,內(nèi)存占用(footprint)、延時(shí)(latency)和吞吐量(throughput)
    2022-01-01
  • SpringBoot通過(guò)參數(shù)注解自動(dòng)獲取當(dāng)前用戶信息的方法

    SpringBoot通過(guò)參數(shù)注解自動(dòng)獲取當(dāng)前用戶信息的方法

    這篇文章主要介紹了SpringBoot通過(guò)參數(shù)注解自動(dòng)獲取當(dāng)前用戶信息的方法,文中使用HandlerMethodArgumentResolver 類來(lái)實(shí)現(xiàn)這個(gè)功能,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • mybatis某些字段無(wú)法映射成功的解決

    mybatis某些字段無(wú)法映射成功的解決

    這篇文章主要介紹了mybatis某些字段無(wú)法映射成功的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • java四種訪問(wèn)權(quán)限實(shí)例分析

    java四種訪問(wèn)權(quán)限實(shí)例分析

    這篇文章主要介紹了java四種訪問(wèn)權(quán)限實(shí)例分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • JavaWeb項(xiàng)目實(shí)現(xiàn)文件上傳動(dòng)態(tài)顯示進(jìn)度實(shí)例

    JavaWeb項(xiàng)目實(shí)現(xiàn)文件上傳動(dòng)態(tài)顯示進(jìn)度實(shí)例

    本篇文章主要介紹了JavaWeb項(xiàng)目實(shí)現(xiàn)文件上傳動(dòng)態(tài)顯示進(jìn)度實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-04-04
  • Spring核心容器IOC原理實(shí)例解析

    Spring核心容器IOC原理實(shí)例解析

    這篇文章主要介紹了Spring核心容器IOC原理實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論