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();}
-
蘋果6怎麼設置可愛主題
蘋果手機功能多,但是有一個問題,那就是這個主題不能隨意更換。其實蘋果6手機主題也是有辦法換的,蘋果6更換手機主題需要藉助第三方軟件LineDeco,那麼應該怎麼操作?首先下載一個名爲LineDeco的軟件,進入appstore下載安裝即可。下載完成後,在桌面上面找到LineDeco,點擊進...
-
手機屏幕上出現黑斑怎麼解決
1、重新開關機。2、切換到不同界面,查看是否都是同一位置出現此情況。初步排除圖案背景問題。3、恢復出廠設置嘗試。4、如果問題依舊,需要對實物機器進行實際檢測。建議將手機送至就近的服務中心進行檢測,服務中心會根據檢測結果確定手機的具體問題以及配件。...
-
省內移動數據流量是指什麼
省內移動數據流量是指你的SIM卡所屬省份的可用GPRS流量,如果出了你的卡所屬的省份,去別的省,那省內移動數據流量就不可以使用,只能使用全國通用流量。移動數據流量有省內流量和全國通用流量,國內流量和省內流量是有所區別的。首先優先度不同:正常情況下,如果用戶在自...
-
查詢蘋果手機序列號的方法
1、首先打開設置,選擇通用點擊關於本機,然後長按序列號,點擊拷貝,返回桌面。2、打開safari,接着進入蘋果官網,點擊左上角的兩道槓圖標,點擊技術支持,點擊搜索支持框,點擊快速鏈接的保修狀態查詢,最後輸入序列號,輸入驗證碼,點擊繼續即可查看。...