java,jmh
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java jmh是什麼,讓我們一起了解一下?
JMH是一種Java工具,用於構建、運行和分析用Java和其他針對JVM的語言編寫的nano/micro/mili/macro基準測試。JMH一般用於代碼的性能調優,精度可以達到納秒級別,適用於 java以及其他基於JVM的語言。
JMH註解説明:
在運行時,註解配置被用於解析生成BenchmarkListEntry配置類實例。
一個方法對應一個@Benchmark註解,一個@Benchmark註解對應一個基準測試方法。
註釋在類上的註解,或者註釋在類的字段上的註解,則是類中所有基準測試方法共用的配置。
@Benchmark聲明一個public方法為基準測試方法。
@BenchmarkMode通過JMH我們可以輕鬆的測試出某個接口的吞吐量、平均執行時間等指標的數據(假設我想測試testGson方法的平均耗時,那麼可以使用@BenchmarkMode註解指定測試維度為Mode.AverageTime。)
@Measurement測量次數
@Measurement假設我想測量testGson方法五次,那麼可以使用@Measurement註解。
@Warmup配置預熱參數。
為了數據準確,我們可能需要讓testGson方法做下熱身運動。如在方法中創建GsonParser對象,預熱可以避免首次創建GsonParser時因多了類加載的耗時而導致測試結果不準備的情況。jvm使用JIT即時編譯器,一定的預熱次數可讓JIT對testGson方法的調用鏈路完成編譯,去掉解釋執行對測試結果的影響。
@OutputTimeUnit
OutputTimeUnit註解用於指定輸出的方法執行耗時的單位。如果方法執行耗時為秒級別,為了便於 觀察結果,我們可以使用@OutputTimeUnit指定輸出的耗時時間單位為秒;如果方法執行耗時為毫秒級別,為了便於觀察結果,我們可以使用@OutputTimeUnit指定輸出的耗時時間單位為毫秒,否則使用默認的秒做單位,會輸出10的負幾次方這樣的數字,不太直觀。
@Fork用於指定fork出多少個子進程來執行同一基準測試方法。假設我們不需要多個進程,那麼 可以使用@Fork指定為進程數為1。
@Threads註解用於指定使用多少個線程來執行基準測試方法,如果使用@Threads指定線程數為2,那麼每次測量都會創建兩個線程來執行基準測試方法。
具體代碼如下:
public void lockInc(){ lock.lock(); try { x++; }finally { lock.unlock(); } } public void synInt(){ synchronized (this){ x++; } }}@State(Scope.Group)public static class InterMoticMonitor{ private AtomicInteger a=new AtomicInteger(); public void atoMic(){ a.incrementAndGet(); }}@Benchmark@Group("sync")@GroupThreads(10)public void syn(IntMonitor intMonitor){ intMonitor.synInt();}@Benchmark@Group("lock")@GroupThreads(10)public void lock(IntMonitor intMonitor){ intMonitor.lockInc();}@Benchmark@Group("Atomic")@GroupThreads(10)public void atominDemo(InterMoticMonitor interMoticMonitor){ interMoticMonitor.atoMic();}public static void main(String[] args) throws RunnerException { final Options opts=new OptionsBuilder() .include(Explamlee01.class.getSimpleName()) .forks(1) .warmupIterations(10) .measurementIterations(10) .build(); new Runner(opts).run();}
-
蘋果手機長圖怎麼截圖,蘋果手機截長圖的兩種方法
1、長截圖辦法一iOS13上新之後自帶的長截圖方法,是在我們瀏覽網頁的時候使用的。操作方法:上音量鍵+開關鍵一起按下,然後點開截好的圖片,選擇“整頁”截圖即可。2、長截圖方法二利用QQ實現長截圖。操作方法:首先就是需要我們打開QQ,然後試着上音量鍵+開關鍵一起按下...
-
省內移動數據流量是指什麼
省內移動數據流量是指你的SIM卡所屬省份的可用GPRS流量,如果出了你的卡所屬的省份,去別的省,那省內移動數據流量就不可以使用,只能使用全國通用流量。移動數據流量有省內流量和全國通用流量,國內流量和省內流量是有所區別的。首先優先度不同:正常情況下,如果用户在自...
-
關於底噪的意思介紹
1、底噪亦稱背景噪聲,基本所有的好耳機都有底噪,耳機底噪一般都是因為前端的問題,耳機的靈敏度越高對於底噪就越敏感,一些高靈敏度和低阻抗的耳機會把底噪放大,如果加大音量的情況下,底噪會更加的明顯。2、檢測MP3底噪,一般方法是在夜晚等比較安靜的環境中戴上耳機,播...
-
黑色背景拍照竅門詳解
1、調整拍攝角度,尋找背景:既然是拍攝黑背景,在拍攝前我們儘量選擇深色的背景,這樣也就更加容易達到效果。不過深色不一定要是純黑色,只要顏色較為深沉,偏向暗色調的均可。拍攝前多多觀察,尋找不同的拍攝角度,以找到有反差的深色作為背景。要多嘗試不同的角度,直至主體...