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
 
 
四、官网地址
 
五、官网使用案例

 
 
 

 

 

 

 

 

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 排列组合c怎么算_希尔排序与初始状态有关吗

    排列组合c怎么算_希尔排序与初始状态有关吗P1030求先序排列

    2022年4月20日
    48
  • webview禁止长按复制_chrome复制插件

    webview禁止长按复制_chrome复制插件8.长按事件因为webview长按时将会调用系统的复制控件://长按复制粘贴mWebView.setOnLongClickListener(newView.OnLongClickListener(){@OverridepublicbooleanonLongClick(Viewview){

    2022年9月29日
    5
  • 分享社群规划全流程sop(基础搭建、日常维…

    分享社群规划全流程sop(基础搭建、日常维…无套路,纯分享!全套社群运营文档,可学习套用相信不少做社群运营的朋友一定会出现过这种情况,微信社群或者QQ社群内的群成员不活跃,整天群里犹如一潭死水,此外还有运营目标不明确、成员不愿积极发言、大部分人入群从不说话等等问题。作为运营狗一定要学会社群规划,今天就给大家带来一份【社群规划全流程sop】,主要包含基础搭建、日常维护、增留转、互动案例等四个步骤,每个步骤都有详细的规划讲解,以及相关案例,非常值得参考学习使用。社群规划全流程sop社群规划全流程sop社…

    2022年5月9日
    69
  • c++容器(vector、list、deque)

    vector,deque 和 list顺序性容器:向量 vector :是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数

    2021年12月22日
    56
  • 序列化和反序列化的简单理解[通俗易懂]

    序列化和反序列化的简单理解[通俗易懂]一、序列化和反序列化的概念  把对象转换为字节序列的过程称为对象的序列化。  把字节序列恢复为对象的过程称为对象的反序列化。  对象的序列化主要有两种用途:  1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;  2)在网络上传送对象的字节序列。  在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是

    2022年6月29日
    24
  • latex中参考文献怎么弄进去_论文中的参考文献怎么标注右上角

    latex中参考文献怎么弄进去_论文中的参考文献怎么标注右上角参考文献常见问题集1.请问如何将参考文献的计算器置零,然后再计数,格式大致是这样:1文12文2…1文12文2我是这样实现的:beginthebibliography99endthebibliography……beginthebibliography9999endthebibliography我的文本实在ScienticWorkplace中编辑的,建议你也使用这个软件,很…

    2025年10月14日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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