为何弃用main测试,这Java高级测试法更胜一筹?

2026-05-26 03:370阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2772个文字,预计阅读时间需要12分钟。

为何弃用main测试,这Java高级测试法更胜一筹?

在开发过程中,我们面对一些代码的调用或工具的使用,存在多种选择。在不明确其性能时,我们首先想做的便是测试它。多数情况下,我们会简单采用多次计数的办法来评估。

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

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

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

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

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

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

JMH的使用场景:

  • 定量分析某个热点函数的优化效果
  • 想定量地知道某个函数需要执行多长时间,以及执行时间和输入变量的相关性
  • 对比一个函数的多种实现方式
  • 本篇主要是介绍JMH的DEMO演示,和常用的注解参数。希望能对你起到帮助。

    阅读全文

    本文共计2772个文字,预计阅读时间需要12分钟。

    为何弃用main测试,这Java高级测试法更胜一筹?

    在开发过程中,我们面对一些代码的调用或工具的使用,存在多种选择。在不明确其性能时,我们首先想做的便是测试它。多数情况下,我们会简单采用多次计数的办法来评估。

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

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

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

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

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

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

    JMH的使用场景:

  • 定量分析某个热点函数的优化效果
  • 想定量地知道某个函数需要执行多长时间,以及执行时间和输入变量的相关性
  • 对比一个函数的多种实现方式
  • 本篇主要是介绍JMH的DEMO演示,和常用的注解参数。希望能对你起到帮助。

    阅读全文