我在Java程序中做了100次對數和功率計算。第二次開始所用的時間(使用System.nanotime())比第一個實例快。爲什麼? Java(我使用JDK8)是否使用任何內存中的緩存來進行數學計算?JVM如何第二次更快地執行數學計算?
1
A
回答
3
在第一次數學計算時,JVM至少需要將Math
類從硬盤加載到內存中,驗證它(掃描錯誤)並解析它以提取方法,註釋等。它比計算對數。因此,第一次訪問該類可能比後續訪問慢許多倍。
在進一步的迭代過程中,可以觸發代碼的JIT編譯(所謂堆棧替換),並且您的測試方法將被編譯,因此您可能會因爲調用Math方法而加速更多隻需簡單地用CPU指令代替,減少了將參數傳遞給本地代碼以及解釋迭代工作的開銷。此外,如果您的測試寫得不好,而且您沒有使用計算結果,那麼JIT編譯器可能根本不會調用Math庫。
最後,對於如Math.log
這樣的快速方法,碳納米管可能會產生太不精確的結果。考慮寫適當的JMH benchmark。
相關問題
- 1. 第二次運行時計時器的計數更快
- 2. 如何更快地執行相機數據計算?
- 3. 排序第二次更快
- 4. Caculator - 第一次計算顯示,但第二次不計算
- 5. 每第二次只計算一次
- 6. 如何在第一次執行後調用第二個函數?
- 7. Mysql查詢給出不同的計數第一次和第二次執行
- 8. 爲什麼WalkingFileTree第二次更快?
- 9. 如何執行數學運算?
- 10. 在第二次計算中重複使用第一次計算的結果
- 11. 我的第一次計數通過第二次計數得到更新?
- 12. 計算,如果首次加載如果第二次圖案
- 13. 如何在QBO3 XSLT模板中執行Date數學計算?
- 14. 如何通過並行計算更快地創建Python程序?
- 15. 計算執行if語句的次數
- 16. 計算腳本執行的次數
- 17. 計算循環執行的次數
- 18. Excel計算第一次和第二次發生的公式
- 19. 更快計算500,000行
- 20. 在Python中執行函數計算的更快方法?
- 21. 如何計算第二行標籤中的字符數?
- 22. 執行單次計算N次
- 23. Javascript執行後第二次點擊
- 24. 第二次檢查不執行
- 25. 停止執行e.preventDefault();第二次點擊?
- 26. jQuery的.trigger不執行第二次
- 27. Scanf將不會執行第二次
- 28. WinJS.xhr錯誤而執行第二次
- 29. 爲什麼第二次運行相同的代碼會更快?
- 30. 進行數學計算
Uuless你展示你的代碼,這是一個非常理論的問題。 –