JVM之System.currentTimeMillis及nanoTime原理詳解

JVM源碼分析之System.currentTimeMillis及nanoTime原理詳解

提取關(guān)鍵問(wèn)題:

  1. 在mac下發(fā)現(xiàn)System.nanoTime()在JDK7和JDK8下輸出的值怎么完全不一樣
  2. System.nanoTime()的值很奇怪,究竟是怎么算出來(lái)的
  3. System.currentTimeMillis()為何不是System.nanoTime()的1000000倍
  4. System.nanoTime() 之間的時(shí)間段如何轉(zhuǎn)換成ms
  5. 在Java中使用System.nanoTime()時(shí),為什么要使用t1-t0 <0,而不是t1 <t0
  6. 如何測(cè)試System.nanoTime()和System.currentTimeMillis()性能

解答:

    1. 在mac下發(fā)現(xiàn)System.nanoTime()在JDK7和JDK8下輸出的值怎么完全不一樣
 在mac中,JDK8下多了一個(gè)__APPLE__宏下定義的實(shí)現(xiàn), 在linux下JDK7和JDK8的實(shí)現(xiàn)都是一樣的
  • System.nanoTime()的值很奇怪,究竟是怎么算出來(lái)的
這是個(gè)native的方法,應(yīng)該底層使用C++實(shí)現(xiàn)的,  找代碼底層是一些庫(kù)文件,librt.so.1、librt.so,
最終會(huì)在系統(tǒng)啟動(dòng)初始化的時(shí)候設(shè)置,記錄了啟動(dòng)的時(shí)間。
因此nanoTime其實(shí)算出來(lái)的是一個(gè)相對(duì)的時(shí)間,相對(duì)于系統(tǒng)啟動(dòng)的時(shí)候的時(shí)間
  • System.currentTimeMillis()為何不是System.nanoTime()的1000000倍
  • Java里currentTimeMillis的實(shí)現(xiàn)
new Date(0).getTime() 其實(shí)是就是1970/01/01 08:00:00
而new Date().getTime()是返回的當(dāng)前時(shí)間
new Date().getTime() - new Date(0).getTime()  其實(shí)就是當(dāng)前時(shí)間距離1970/01/01 08:00:00有多少毫秒
而System.currentTimeMillis()返回的正好是這個(gè)值,
也就是說(shuō)System.currentTimeMillis()就是返回的當(dāng)前時(shí)間距離1970/01/01 08:00:00的毫秒數(shù)。

System.currentTimeMillis() 與 System.nanoTime()計(jì)算方式不一致, 所以System.currentTimeMillis()為何不是System.nanoTime()的1,000,000倍。
  • System.nanoTime() 之間的時(shí)間段如何轉(zhuǎn)換成ms
使用TimeUnit 枚舉類進(jìn)行轉(zhuǎn)換
long start = System.nanoTime();
try {
    Thread.sleep(5000);
} catch (InterruptedException e) {
   e.printStackTrace();
}
long period = System.nanoTime() - start;
System.out.println(String.format(
      "period(nanoseconds): %d, period(seconds): %d", new Object[]{
       period, TimeUnit.NANOSECONDS.toSeconds(period)}));

PS: 若你覺(jué)得可以、還行、過(guò)得去、甚至不太差的話,可以“關(guān)注”一下,就此謝過(guò)!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容