3 回答

TA貢獻1869條經驗 獲得超4個贊
沒有微基準測試的定義,但是當我使用微基準測試時,它的意思是一個旨在測試某些特定硬件1或語言功能的性能的小型人工基準測試。相比之下,更好的基準是設計用于執行實際任務的真實程序。(在這兩種情況之間劃清界限是毫無意義的,IMO,我不會嘗試。)
微觀基準測試的危險在于,編寫基準測試很容易得出完全誤導的結果。Java微基準測試中的一些常見陷阱是:
編寫編譯器可以推斷出的代碼是沒有用的工作,因此會完全優化,
沒有考慮到Java內存管理的“笨拙”性質,并且
不考慮JVM啟動效果;例如,加載和JIT編譯類所需的時間,以及(相反)一旦JIT編譯了這些方法就會發生執行速度的提高。
但是,即使您解決了上述問題,仍然存在無法解決基準測試的系統性問題。基準測試的代碼和行為通常與您真正關心的內容無關。即您的應用程序將如何執行。太多的“隱藏變量”使您無法從基準測試推廣到典型程序,更不用說對程序了。
由于這些原因,我們定期建議人們不要浪費時間使用微基準測試。相反,最好編寫簡單自然的代碼,并使用探查器來識別需要手動優化的區域。有趣的是,通常會發現,實際應用中最重要的性能問題是由于數據結構和算法(包括網絡,數據庫和與線程相關的瓶頸)的不良設計所致,而不是典型的微基準所試圖解決的問題。測試。
@BalusC在Hotspot FAQ頁面中提供了一個很好的指向該主題資料的鏈接。這是Brian Goetz的IBM白皮書的鏈接。
1-專家甚至不會嘗試使用Java進行硬件基準測試。字節碼和硬件之間發生太多“復雜的事情”,無法從原始結果中得出關于硬件的有效/有用的結論。您最好使用更接近硬件的語言。例如C甚至匯編代碼。

TA貢獻1794條經驗 獲得超8個贊
它是什么意思,不是什么意思?
我要說的是,微基準測試只是意味著測量一些微小的東西。Tiny可能取決于上下文,但通常在單個系統調用或類似級別上?;鶞蕼y試是指以上所有內容。
什么是IS和IS N'T微基準測試的一些示例?
本文列出了測量GETPID()系統調用的時間和使用的memcpy()測量的時間來復制存儲器微基準測試的例子。
對算法實現等的任何衡量均不算作微基準測試。特別是結果報告列出了減少執行時間的任務,因此很少將其作為微基準測試。
微基準測試有哪些危險,如何避免?
明顯的危險是它會誘使開發人員優化程序的錯誤部分。另一個危險是,精確地測量小物體非常困難。避免這種情況的最簡單方法可能只是了解程序中花費最多時間的位置。
人們通常會說“不做微基準測試”,但是他們可能的意思是“不要基于微基準測試做出優化決策”。
(或者這是好事嗎?)
它本身并不像這里的其他人那么壞,而且許多網頁似乎都在暗示。它有地方。我從事程序重寫和運行時方面的編織等工作。我們通常會發布所添加指令的微基準,而不是為了指導任何優化,而是確保我們的額外代碼幾乎不會影響重寫程序的執行。
但是,這是一門藝術,
添加回答
舉報