专业汉语词典知识平台,分享汉字词语知识、历史文学知识解答!

励北网
励北网

java测试详解

来源:小易整编  作者:小易  发布时间:2023-03-07 04:12
摘要:java测试详解在日常开发中,我们对一些代码的调用或者工具的使用会存在多种选择方式,在不确定他们性能的时候,我们首先想要做的就是去测量它。大多数时候,我们会简单的采用多次计数的方式来测量,来看这个方法的总耗时。但是,如果熟悉JVM类加载机制...

java测试详解

java测试详解

在日常开发中,我们对一些代码的调用或者工具的使用会存在多种选择方式,在不确定他们性能的时候,我们首先想要做的就是去测量它。大多数时候,我们会简单的采用多次计数的方式来测量,来看这个方法的总耗时。

但是,如果熟悉JVM类加载机制的话,应该知道JVM默认的执行模式是JIT编译与解释混合执行。JVM通过热点代码统计分析,识别高频方法的调用、循环体、公共模块等,基于JIT动态编译技术,会将热点代码转换成机器码,直接交给CPU执行。

也就是说,JVM会不断的进行编译优化,这就使得很难确定重复多少次才能得到一个稳定的测试结果?所以,很多有经验的同学会在测试代码前写一段预热的逻辑。

JMH,全称 Java Microbenchmark Harness (微基准测试框架),是专门用于Java代码微基准测试的一套测试工具API,是由 OpenJDK/Oracle 官方发布的工具。何谓 Micro Benchmark 呢?简单地说就是在 method 层面上的 benchmark,精度可以精确到微秒级。

Java的基准测试需要注意的几个点:

  • 测试前需要预热。
  • 防止无用代码进入测试方法中。
  • 并发测试。
  • 测试结果呈现。

JMH的使用场景:

  1. 定量分析某个热点函数的优化效果
  2. 想定量地知道某个函数需要执行多长时间,以及执行时间和输入变量的相关性
  3. 对比一个函数的多种实现方式

本篇主要是介绍JMH的DEMO演示,和常用的注解参数。希望能对你起到帮助。

DEMO 演示

这里先演示一个DEMO,让不了解JMH的同学能够快速掌握这个工具的大概用法。

1. 测试项目构建

JMH是内置Java9及之后的版本。这里是以Java8进行说明。

为了方便,这里直接介绍使用maven构建JMH测试项目的方式。

第一种是使用命令行构建,在指定目录下执行以下命令:

$ mvn archetype:generate \          -DinteractiveMode=false \          -DarchetypeGroupId=org.openjdk.jmh \          -DarchetypeArtifactId=jmh-java-benchmark-archetype \          -DgroupId=org.sample \          -DartifactId=test \          -Dversion=1.0

对应目录下会出现一个test项目,打开项目后我们会看到这样的项目结构。

第二种方式就是直接在现有的maven项目中添加jmh-core和jmh-generator-annprocess的依赖来集成JMH。

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

2. 编写性能测试

这里我以测试LinkedList 通过index 方式迭代和foreach 方式迭代的性能差距为例子,编写测试类,涉及到的注解在之后会讲解。

/** * @author Richard_yyf * @version 1.0 2019/8/27 */ @State(Scope.Benchmark) @OutputTimeUnit(TimeUnit.SECONDS) @Threads(Threads.MAX) public class LinkedListIterationBenchMark { private static final int SIZE = 10000;    private List<String> list = new LinkedList<>();    @Setup    public void setUp() {        for (int i = 0; i < SIZE; i++) {            list.add(String.valueOf(i));        }    }    @Benchmark    @BenchmarkMode(Mode.Throughput)    public void forIndexIterate() {        for (int i = 0; i < list.size(); i++) {            list.get(i);            System.out.print("");        }    }    @Benchmark    @BenchmarkMode(Mode.Throughput)    public void forEachIterate() {        for (String s : list) {            System.out.print("");        }    } }



本文地址:百科问答频道 https://www.neebe.cn/wenda/918236.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


百科问答
小编:小易整编
相关文章相关阅读
  • 无线WLAN网络测试的五个简单步骤分享

    无线WLAN网络测试的五个简单步骤分享

    在上篇文章跟各位网友分享“如何解决无线路由器网络自动断线?”了,相信大家对于无线WLAN的各个方面大家应该都有一些了解了。那么对于无线WLAN测试,有哪些判断标准呢?可能对大家来说都还有一些不清楚。那么本文将为大家列出5个简单的步骤帮助您来...

  • 电脑测试是什么意思?

    电脑测试是什么意思?

    电脑测试,又称计算机测试,是一种利用软件测试方法工具开展电脑软件及其硬件功能检测,诊断及收集系统故障资料,以确认系统是否符合用户期望的测试形式。它是计算机网络和系统维护更新和改善性能的重要手段,其目的是通过检测系统功能及响应,以确保系统质...

  • QA测试是什么意思?

    QA测试是什么意思?

    QA测试(也称为质量控制测试)是指测试质量控制的过程,它是识别软件中的错误和促进软件质量提高的一种方法。QA测试的目的是确保软件的质量,让用户体验更好。QA测试被认为是一种风险管理。它可以帮助开发团队更积极地探索可能存在的问题,大部分问题...

  • 冒烟测试是什么意思?

    冒烟测试是什么意思?

    冒烟测试(SmokeTest)是一种软件测试方法,主要用于软件的外部和核心功能的简单检测,又称点火测试(IgnitionTest)。冒烟测试主要用于在软件发布临近之前对软件功能进行快速通过检查,也可以精简测试代码覆盖度,减少不必要的...

  • 测试版是什么意思?

    测试版是什么意思?

    测试版是在软件开发过程中的一个重要环节,它是通过测试过程来避免出现任何错误,让产品在最终发布时有质量的保证。测试版的本身是一个衍生的版本,一般具备最终版本的一些功能,可以由开发者或企业提供给公众或部分内部员工,从而在发行之前了解真正情况,...

  • GPU测试工具是什么意思?

    GPU测试工具是什么意思?

    GPU测试工具是一款用来测试图形处理器(GPU)性能的软件,它可以帮助用户快速检测图形处理器(GPU)的性能,确定硬件设备是否符合预期要求。当用户更换硬件设备时,可以使用这种工具快速了解硬件设备的性能情况,有助于确定是否符合应用程序运行要...

  • 打印测试是什么意思?

    打印测试是什么意思?

    打印测试是指对打印机进行一系列检测来评估打印质量的评估过程。这包括为不同类型的要求测试打印机的能力和性能,以及测试支持文件格式支持、色彩准确度等。首先,在执行打印测试之前,要准备一些必要的测试资料,如测试纸、测试印刷品等。之后,可以通过硬...

  • 灰盒测试是什么意思?

    灰盒测试是什么意思?

    灰盒测试是指在软件或硬件的开发和发布前进行的一种测试。它能够提高系统设计质量、检查程序质量以及寻找程序存在的bug,并对其进行管理和控制。灰盒测试的内容和方法主要包括:检查需求文档,执行功能测试,执行单元测试,编写测试脚本,做性能测试,做...

  • 周排行
  • 月排行
  • 年排行

精彩推荐