Java 性能测试工具 JMH

来源:互联网 发布:刷花呗的淘宝店铺 编辑:程序博客网 时间:2024/05/15 23:52

前言

最近在看《Java8函数式编程》时,发现了一个性能测试工具 JMH(Java Microbenchmark Harness)。这个工具方便了我们进行微基准测试。比如,在进行微基准测试时,我们想要测试的是“程序被JVM编译成机器代码(而不是直接执行字节码)”的执行速度。为了让JVM把要测试的代码编译成机器码,我们可能需要把要测试的代码进行“预热处理”(就是先跑几回,或十几回等,当运行的次多了,JVM就会生成机器码),JMH就提供“预热处理”等一系列的处理。

正文

一,学习文章:

  • JMH - Java Microbenchmark Harness:从零开始的学习JMH的使用。包括“自动创建JMH工程”、“和一些关键字的作用”、“测试时代码的优化方案”等。
  • JMH简介:一篇国外关于JMH文章的翻译,这篇文章和上面那篇文章内容有点有类似,但多了一些关于注解CPU的介绍。
  • JMH 官方介绍
  • JMH Samples

二,要注意的问题

  • 用Maven进行 install
    在写完 Benchmark 后,在执行之前,要使用mvn clean install命令进行生成Jar包。因为如果不执行这个命令,而直接IDE执行Main函数的话,会出现找不到/META-INF/BenchmarkList文件的错误。使用 mvn 命令的话,就会生成 BenchmarkList 文件。生成这个文件后,再使用IDE执行就没问题了。

  • 在 Intellij IDEA 中执行
    当在 Intellij IDEA 中执行的Main函数时,不要使用 Debug 模式执行,要使用 Run 模式执行。如果使用 Debug 模式执行的话,会出现下面的错误:

ERROR: transportFATAL  eErRrRoOrR  2i0n2 :n actoinvnee cmte tfhaoidl:e dJ:D WCPo nNno transports ineitcitailoinz erde,f ujsvemdERROR: JtDiWEP Transport dt_socket failed tror oirn=iAtGiEaNlTi_zEeRROR_TRANSPORT_INIT,( 1T9R7)ANSPORT_INIT(510)JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]<forked VM failed with exit code 134><stdout last='20 lines'>FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)</stdout><stderr last='20 lines'>ERROR: transport error 202: connect failed: Connection refusedERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]</stderr># Run complete. Total time: 00:00:00Benchmark  Mode  Cnt  Score   Error  Units
原创粉丝点击