十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!

這篇文章主要為大家展示了如何實(shí)現(xiàn)Benchmark框架,內(nèi)容簡(jiǎn)而易懂,下面讓小編帶大家一起學(xué)習(xí)一下吧。
簡(jiǎn)介
使用過(guò)JMH的同學(xué)一定會(huì)驚嘆它的神奇。JMH作為一個(gè)優(yōu)秀的Benchmark框架帶給了我們無(wú)數(shù)的歡樂(lè)。作為一個(gè)有極客精神的程序員,那么有沒(méi)有想過(guò)去自己實(shí)現(xiàn)一個(gè)Benchmark框架呢?
在實(shí)現(xiàn)Benchmark框架的時(shí)候有需要注意些什么問(wèn)題呢?快來(lái)一起看看吧。
八條軍規(guī)
這里叫軍規(guī)實(shí)際上不合適,只是借用一下軍規(guī)的來(lái)彰顯一下氣勢(shì)!大家不要太介意。
第一條軍規(guī)
工欲善其事,必先利其器。想寫(xiě)好一個(gè)JMH當(dāng)然需要深入了解JVM的運(yùn)行原理,包括JIT,C1,C2編譯器和他們的分層編譯原理,JIT運(yùn)行時(shí)的編譯優(yōu)化,包括Loop unrolling, Inlining, Dead Code Elimination,
Escape analysis, Intrinsics, Branch prediction等等。
當(dāng)然,最好是參考一下大牛們寫(xiě)過(guò)的JMH框架,找點(diǎn)靈感。
最后大家要了解,Benchmark框架不是萬(wàn)能的。它只是在特定的環(huán)境中JVM的表現(xiàn)。
因?yàn)樵贐enchmark中我們肯定是要做循環(huán)的,一般來(lái)說(shuō)就是某某方法運(yùn)行多少次,這種比較簡(jiǎn)單的循環(huán)。實(shí)際上,JVM運(yùn)行的代碼是非常復(fù)雜的。Benchmark遠(yuǎn)遠(yuǎn)不能代表JVM的全部。
但是,見(jiàn)微知著,使用Benchmark還是可以一窺JVM的秘密的。
第二條軍規(guī)
在JMH中,我們一般需要設(shè)置warmup和measurement的次數(shù):
@Warmup(iterations = 10, time = 1, timeUnit = TimeUnit.SECONDS) @Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)