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、調整拍攝角度,尋找背景:既然是拍攝黑背景,在拍攝前我們儘量選擇深色的背景,這樣也就更加容易達到效果。不過深色不一定要是純黑色,只要顏色較為深沉,偏向暗色調的均可。拍攝前多多觀察,尋找不同的拍攝角度,以找到有反差的深色作為背景。要多嘗試不同的角度,直至主體...