JMH:如何设置和运行JMH基准
健康警告!
這篇文章描述了如何設(shè)置和運行簡單的JMH基準(zhǔn)測試。 眾所周知,微基準(zhǔn)測試很難正確設(shè)置,即使您確實正確設(shè)置了(通過使用JMH之類的工具),它們?nèi)匀粫a(chǎn)生誤導(dǎo)。 僅僅因為您的代碼在極端孤立的人為情況下以某種方式運行,并不意味著它將在您的生產(chǎn)代碼內(nèi)以相同的方式運行。 僅舉幾個例子,在實際程序中,CPU緩存將受到代碼其他部分的壓力,任何對象的創(chuàng)建都會對GC產(chǎn)生下游影響,而JIT可能從您的其他部分內(nèi)聯(lián)并編譯了代碼與您基準(zhǔn)測試的代碼沖突的代碼。 不過,微型基準(zhǔn)確實有其地位,如果您打算使用微型基準(zhǔn),那么最好還是與JMH一起正確地執(zhí)行。
在最近的一篇文章中,我被要求執(zhí)行我的測試作為JMH性能基準(zhǔn)。
JMH是用于構(gòu)建,運行和分析以Java和其他針對JVM的其他語言編寫的nano / micro / milli / macro基準(zhǔn)測試的Java工具。 在此處查看完整文檔。
JMH之所以如此出色,是因為它負(fù)責(zé)預(yù)熱迭代,分派JVM進(jìn)程,以使基準(zhǔn)不會互相干擾,整理結(jié)果并以統(tǒng)一的方式呈現(xiàn)。 還有更多。
我聽過很多有關(guān)JMH的信息,看到過許多JMH的結(jié)果,但我自己卻從未真正運行過。 太簡單了! 這就是我做的。
將這些依賴項添加到您的Maven pom.xml文件中:
<dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-core</artifactId><version>1.5.1</version></dependency><dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-generator-annprocess</artifactId><version>1.5.1</version> </dependency>然后確定要進(jìn)行基準(zhǔn)測試的方法,并向其添加注釋@Benchmark。 如果您需要任何初始化代碼,請將其添加到應(yīng)標(biāo)記為@Setup的方法中。
運行基準(zhǔn)測試的最簡單方法是通過將該實現(xiàn)添加到您的main方法中來進(jìn)行添加。 (有關(guān)運行測試的其他方法,請參見此處 )。
public static void main(String[] args) throws RunnerException {Options opt = new OptionsBuilder().include(MyBenchmark.class.getSimpleName()).forks(1).build();new Runner(opt).run(); }然后像運行任何普通程序一樣運行,您將獲得所有JMH的好處!
作為查看JMH基準(zhǔn)格式的示例,我的結(jié)果如下所示:
Benchmark Mode Cnt Score Error Units CompTestBenchmark.bmCustomComparator thrpt 20 2598.617 ± 67.634 ops/s CompTestBenchmark.bmJDKComparator thrpt 20 751.110 ± 14.835 ops/s CompTestBenchmark.bmNoVTLComparator thrpt 20 1348.750 ± 30.382 ops/s CompTestBenchmark.bmNoVTLOrAutoBoxingComparator thrpt 20 2202.995 ± 43.673 ops/s有大量的花哨的技巧可以微調(diào)您的基準(zhǔn),我不會在這里討論,但希望這能使您正常運行。
- 有關(guān)我的測試的完整代碼列表,請參見此處 。
翻譯自: https://www.javacodegeeks.com/2015/02/jmh-setup-run-jmh-benchmark.html
總結(jié)
以上是生活随笔為你收集整理的JMH:如何设置和运行JMH基准的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: linux显示文件内容的命令(linux
- 下一篇: DDOS防护手段有(ddos防护是内部吗
