3 回答

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

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