JMH是什么?

JMH是什么?一、JMH是什么?JMH是Java性能测试工具,主要是对工程中一些方法进行一些基准测试,支持的时间单位为:nano/micro/milli/macro二、JMH使用案例-代码:1P

大家好,又见面了,我是你们的朋友全栈君。

 
一、JMH是什么
       JMH是Java性能测试工具,主要是对工程中一些方法进行一些基准测试,支持的时间单位为:nano / micro / milli / macro
 
二、JMH使用案例-代码:
  
1 POM文件 
    

<span role="heading" aria-level="2">JMH是什么?
<span role="heading" aria-level="2">JMH是什么?

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-core</artifactId>
    <version>1.20</version>
  </dependency>
  <dependency>
    <groupId>org.openjdk.jmh</groupId>
    <artifactId>jmh-generator-annprocess</artifactId>
    <version>1.20</version>
    <scope>provided</scope>
  </dependency>
</dependencies>


<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <executions>
        <execution>
          <id>run-benchmarks</id>
          <phase>integration-test</phase>
          <goals>
            <goal>exec</goal>
          </goals>
          <configuration>
            <classpathScope>test</classpathScope>
            <executable>java</executable>
            <arguments>
              <argument>-classpath</argument>
              <classpath />
              <argument>org.openjdk.jmh.Main</argument>
              <argument>.*</argument>
            </arguments>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

View Code

 2 测试代码:

  

<span role="heading" aria-level="2">JMH是什么?
<span role="heading" aria-level="2">JMH是什么?

import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;


import java.util.concurrent.TimeUnit;


@BenchmarkMode(Mode.AverageTime)     //使用模式  :是对吞吐量 平均响应时间等
@Warmup(iterations = 3)     //配置预热次数, 这里我们设置为3次 ,让Jvm该加载的都加载
//本例是一次运行5秒,总共运行3次
// 在性能对比时候,采用默认1秒即可,
@Measurement(iterations = 3, time = 5, timeUnit = TimeUnit.SECONDS)
@Threads(1) // 配置同时起多少个线程执行 ,也可以设置到方法上
@Fork(1)    //代表启动多个单独的进程分别测试每个方法,我们这里指定为每个方法启动一个进程
@OutputTimeUnit(TimeUnit.NANOSECONDS)   //OutputTimeUnit 统计结果的时间单位,这个例子的单位为 秒
public class JMHTestDemo {


    @Benchmark
    public void testStringAdd() {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < 1000; i++) {
            sb.append(i);
        }
//        System.out.println( sb.toString());
    }

    @Benchmark
    public void testStringBuilderAdd() {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 1000; i++) {
            sb.append(i);
        }
//        System.out.println( sb.toString());
    }


    public static void main(String[] args) throws RunnerException {
        Options opt = new OptionsBuilder()
                .include(JMHTestDemo.class.getSimpleName())
                .build();
        new Runner(opt).run();
    }
}

View Code

 

 

三、问题:

  1、使用Maven install 的时候不能用,最后使用Mvn package 打包,然后右键运行的
  2、 Maven的一个插件“exec-maven-plugin” 在Idea中一直是红的,没找到具体是什么问题,但是测试可以使用
  3、官方建议使用Maven来生成项目结构,但是我是直接把对应java拷到Maven项目中做的(也许这是我遇到问题比较多的原因)
mvn原型:生成\
-DinteractiveMode = false \
-DarchetypeGroupId = org.openjdk.jmh \
-DarchetypeArtifactId = jmh- java -benchmark-archetype \
-DgroupId = org.sample \
-DartifactId = 测试 \
-Dversion = 1.0
 
 
四、官网地址
 
五、官网使用案例

 
 
 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154216.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • OpenCV实现SfM(四):Bundle Adjustment

    OpenCV实现SfM(四):Bundle Adjustment使用CeresSolver实现三维重建中的BundleAdjustment.

  • Linux内存映射——mmap

    Linux内存映射——mmap一mmap系统调用1.内存映射所谓的内存映射就是把物理内存映射到进程的地址空间之内,这些应用程序就可以直接使用输入输出的地址空间,从而提高读写的效率。Linux提供了mmap()函数,用来映射物理内存。在驱动程序中,应用程序以设备文件为对象,调用mmap()函数,内核进行内存映射的准备工作,生成vm_area_struct结构体,然后调用设备驱动程序中定义的mmap函数。2.

  • 小程序列表跳转至详情_小程序跳转链接怎么获取

    小程序列表跳转至详情_小程序跳转链接怎么获取效果展示:列表页js部分:onLoad:function(options){varthat=this;wx.request({url:’你的接口’,data:{ 接口参数},header:{‘content-type’:’ap…

  • 下载网页视频并自动合成视频[通俗易懂]

    下载网页视频并自动合成视频[通俗易懂]1.首先使用Chrome打开网页,单击F12打开开发者工具开始视频播放,在F12出来的界面中单击Network在Network中有文件列表,检查当中是否存在m3u8结尾的文件2.如果有m3u8结尾的文件,把它的源地址复制下来源地址复制下来可能分两段(两个http),一段是跳转地址,一段是目标地址,将目标地址保留下来即可。正确的m3u8文件地址大概的样子在下面的命令示例中…

  • 计算机本质「建议收藏」

    计算机本质「建议收藏」首页发现话题提问登录加入知乎为什么计算机能读懂1和0?关注问题写回答计算机计算机科学为什么计算机能读懂1和0?从小到大,我们被告知的都是,计

  • 报关单上常出现的英文单词缩写是_报关单用英文怎么说

    报关单上常出现的英文单词缩写是_报关单用英文怎么说  一.单证(Documents)  进出口业务涉及的单证总的包括三大类:1。金融单证(信用证、汇票、支票和本票)  2.商业单证(发票、装箱单、运输单据、保险单等)3。用于政府管制的单证(许可证、原产地证明、商检证等) declarationform报关单 Threesteps—declaration,examinationofgoodsandreleaseofgoods,

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号