JMH:如何设置和运行JMH基准
健康警告!
這篇文章描述了如何設置和運行簡單的JMH基準測試。 眾所周知,微基準測試很難正確設置,即使您確實正確設置了(通過使用JMH之類的工具),它們仍然會產生誤導。 僅僅因為您的代碼在極端孤立的人為情況下以某種方式運行,并不意味著它將在您的生產代碼內以相同的方式運行。 僅舉幾個例子,在實際程序中,CPU緩存將受到代碼其他部分的壓力,任何對象的創建都會對GC產生下游影響,而JIT可能從您的其他部分內聯并編譯了代碼與您基準測試的代碼沖突的代碼。 不過,微型基準確實有其地位,如果您打算使用微型基準,那么最好還是與JMH一起正確地執行。
在最近的一篇文章中,我被要求執行我的測試作為JMH性能基準。
JMH是用于構建,運行和分析以Java和其他針對JVM的其他語言編寫的nano / micro / milli / macro基準測試的Java工具。 在此處查看完整文檔。
JMH之所以如此出色,是因為它負責預熱迭代,分派JVM進程,以使基準不會互相干擾,整理結果并以統一的方式呈現。 還有更多。
我聽過很多有關JMH的信息,看到過許多JMH的結果,但我自己卻從未真正運行過。 太簡單了! 這就是我做的。
將這些依賴項添加到您的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>然后確定要進行基準測試的方法,并向其添加注釋@Benchmark。 如果您需要任何初始化代碼,請將其添加到應標記為@Setup的方法中。
運行基準測試的最簡單方法是通過將該實現添加到您的main方法中來進行添加。 (有關運行測試的其他方法,請參見此處 )。
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基準格式的示例,我的結果如下所示:
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有大量的花哨的技巧可以微調您的基準,我不會在這里討論,但希望這能使您正常運行。
- 有關我的測試的完整代碼列表,請參見此處 。
翻譯自: https://www.javacodegeeks.com/2015/02/jmh-setup-run-jmh-benchmark.html
總結
以上是生活随笔為你收集整理的JMH:如何设置和运行JMH基准的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux显示文件内容的命令(linux
- 下一篇: 如何使用Hibernate批处理DELE