如何度量你的程序的性能

Java下如何做基准测试

你是否经常用这样的代码来度量代码性能:

public static void main(String[] args) {
    long t1 = System.nanoTime();
    int result = 0;
    for (int i = 0; i < 1000 ; i++) { 
       result +=i;
    }
    long t2 = System.nanoTime();
    System.out.println("Execution time: " + ((t2 - t1) * 1e-9) +
        " seconds to compute result = " + result);
}

那么,你应该继续往下看.

基准测试面临的问题

仔细阅读 《健壮的 Java 基准测试》 这篇文章,详细介绍了Java基准测试面临的问题,和需要考虑的方方面面,尽管文章年代久远,但并未过时.

基准测试框架(JMH)

阅读完上面这篇文章后, 我们就来试试 jmh,java下的微基础测试框架.

配置工程

首先你需要新建一个maven工程(在你的工作过程上,建一个maven模块也行),然后以依赖的方式可以访问到你被测试的代码.然后再添加jmh依赖:

       <dependency>
            <groupId>org.openjdk.jmh</groupId>
            <artifactId>jmh-core</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.openjdk.jmh</groupId>
            <artifactId>jmh-generator-annprocess</artifactId>
            <version>1.4.1</version>
            <scope>provided</scope>
        </dependency>

配置插件:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <compilerVersion>${javac.target}</compilerVersion>
                    <source>${javac.target}</source>
                    <target>${javac.target}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.2</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <finalName>benchmarks</finalName>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>org.openjdk.jmh.Main</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>

    </build>

maven-shade-plugin 插件的主要作用是将所有的代码依赖打包在一个jar中.

编写测试代码

public class MyBenchmark {
    
    @Benchmark
    public void test() {
        //被测试方法调用
    }
}

执行

  • mvn clean package
  • java -jar target/benchmarks.jar

得到结果

Result: 108420.575 ±(99.9%) 402.469 ops/s [Average] Statistics: (min, avg, max) = (102205.984, 108420.575, 113070.541), stdev = 1704.079 Confidence interval (99.9%): [108018.106, 108823.044]

转载于:https://my.oschina.net/xiaog/blog/811130

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值