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

關于Java?獲取時間戳的方法

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

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

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

答案是否定的。

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

Windows:

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

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

Linux:

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

不同的虛擬機實現(xiàn)會帶來性能差異

如今的云主機主要有 Xen 和 KVM 兩種實現(xiàn)方式,網(wǎng)上有文章發(fā)現(xiàn)它們在取系統(tǒng)時間方面存在性能差異。

當我們的虛擬機用的是 Xen 時,取時間的耗時會是 KVM 的十倍以上。不過上文也提供了遇到此類問題該如何解決的方案。

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

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

我的測試代碼

我的測試代碼如下,沒有任何依賴,可以直接用 javac 編譯然后運行。讀者有興趣可以試試。

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

因為我用的是 Windows,所以執(zhí)行輸出當中System.nanoTime() 明顯非常慢。具體輸出內容我就不放出來了,因為不具有參考價值,大多數(shù)生產環(huán)境用的是 Linux。

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

相關文章

  • java設計模式筆記之適配器模式

    java設計模式筆記之適配器模式

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

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

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

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

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

    Java冒泡排序的定義與實例代碼

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

    jvm垃圾回收GC調優(yōu)基礎原理分析

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

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

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

    mybatis某些字段無法映射成功的解決

    這篇文章主要介紹了mybatis某些字段無法映射成功的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • java四種訪問權限實例分析

    java四種訪問權限實例分析

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

    JavaWeb項目實現(xiàn)文件上傳動態(tài)顯示進度實例

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

    Spring核心容器IOC原理實例解析

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

最新評論