OpenJDK基准测试工具-JMH相关的所有注解

IDEA下进行 JMH Java微基准测试工具套件 什么是JMH JMH-Java Microbenchmark Harness(Java微基准测试) 用于测试某方法性能到底是好还是不好,换了方法实现之后性能好还是不好。 2013年首发 由JIT(JAVA即时编译器)开发人员开发、后来归与OpenJdk 官网 http://openjdk.java.net/projects/code-tools/jmh/ 创建JMH测试 创建Maven项目,添加依赖 <!-- JMH的核心包 https://mvnrepository.com/ar 阅读详情
  • @Benchmark 注解基准测试方法,注解的目标为方法。为了保证测试的可靠性,有如下限制
    • 方法必须为公共方法
    • 方法参数可能只包括State类,或者,JMH的基础类型
    • 方法仅在相关State位于 封闭类(enclosing class) 内才可以同步
  • @BenchmarkMode 基础测试模式,声明基准测试将运行的模式,注解的目标可为方法和类。注解在方法上时,只影响被注解方法;
    注解在类上时,影响所有该类内的方法。这个注解的内容有可能被运行时配置覆盖。基础测试模式有
    • Throughput(吞吐量),单位时间内的操作数。
    • AverageTime(平均时间),每个操作的平均时间。
    • SampleTime(采样时间),采样每一个操作的时间。该模式持续调用基准测试方法,随机采样方法调用所需要的时间,自动调整采样频率。
    • SingleShotTime(单个操作的测量时间),用于测量一次基准测试的调用时间。对于不想持续调用的场景,例如对于冷启动测试或者批处理测试很有用。
      这个模式只会调用一次基准测试方法。
    • All,覆盖以上所有测试模式。
  • @OutputTimeUnit 提供测试报告结果中显示的默认时间单位。接受java.util.concurrent.TimeUnit枚举值。
  • @State 标识状态对象,表示被标识类可作为基准测试方法的参数,封装了基准测试正在运行的状态,且可以被继承。
    接受的Scope范围类型有
    • Benchmark,同一类型的所有实例可以被所有工作线程共享。 而被 @Setup 和 @TearDown标识的方法只能被一个工作线程执行,
      且只在对应层次执行一次。其他线程将不会再影响到状态对象。
    • Group,同一类型的所有实例可以被在同一group内的所有工作线程共享。而每一个线程组将会提供他们自己的状态对象。 但是,被 @Setup 和 @TearDown标识的方法只能被一个工作线程执行,
      且只在对应层次执行一次。其他线程将不会再影响到状态对象。
    • Thread,同一类型的所有实例都是不同的,即便是多个状态对象被注入到同一个基准测试中。
  • @Setup,标识fixture方法是在 基准测试前运行。fixture方法指的是与基准测试相关的资源操作,如初始化或清理。接收的参数Level有
    • Trial,在每个基准测试前或者后执行。Trial指的是基准测试的遍历(iterations)集合。
    • Iteration,在每个基准测试循环前或后执行。Iteration指的是基准测试的调用(invocations)集合。
    • Invocation,在每个基准测试被执行时执行。
  • @TearDown ,标识fixture方法是在 基准测试后运行。因为执行相互独立,可能与执行@Setup的线程不同。
  • @Fork,设置基准测试的默认启动的JVM进程数。注解在方法上时,只影响被注解方法;
    注解在类上时,影响所有该类内的方法。这个注解的内容有可能被运行时配置覆盖。可以自定义jvm运行参数。
  • @Group,执行组,主要用于进行不对称测试。每个执行组包含一个或多个线程。
    在一个特定执行组内,一个线程执行一个被@Group和@Benchmark标识的基准测试方法。
    默认一个线程执行一个基准测试方法,可以通过@GroupThreads注解覆盖默认值。JMH会根据执行组的数量以及工作组线程数来获取工作线程的请求数。
  • @GroupThreads,定义在该工作组内运行特定基准测试方法的线程数。
  • @Warmup,配置基准测试的预热参数,注解的目标可为方法和类。注解在方法上时,只影响被注解方法;
    注解在类上时,影响所有该类内的方法。这个注解的内容有可能被运行时配置覆盖。可以配置
    • iterations ,遍历次数
    • time ,每次预热遍历的时间
    • timeUnit ,预热遍历时间的单位
    • batchSize ,每次操作基准测试方法调用的数量
  • @Measurement,配置基准测试的默认测量参数,注解的目标可为方法和类。注解在方法上时,只影响被注解方法;
    注解在类上时,影响所有该类内的方法。这个注解的内容有可能被运行时配置覆盖。可以配置
    • iterations ,遍历次数
    • time ,每次预热遍历的时间
    • timeUnit ,预热遍历时间的单位
    • batchSize ,每次操作基准测试方法调用的数量
  • @AuxCounters,用于标识@State对象作为次要基准测试性能指标的辅助计数器。该注解为实验性api,可能将来会改变或者移除。
    • 该辅助计数器仅支持 Mode.AverageTime 和 Mode.Throughput模式。
    • 该辅助计数器仅用于 Scope.Thread的有效范围,即是线程间相互隔离,每个线程都有自己副本。
    • 只有公共变量和方法会被识别为指标。
    • 只有数值变量和返回值为数值的方法会被识别为指标。包含原始数据类型和封装后的类型。
    • 返回值为空的方法,不会校验类型,即@AuxCounters内可包含@Setup和@TearDown方法。
  • @Param,标识基准测试中可配置的参数。需要注意
    • 标识的变量不能为final,并且应该只位于 @State对象内。
    • 标识的变量类型,只能位原始数据类型,原始数据类型的包装类,字符串,或者枚举值。
    • 需要设置默认值。
  • @OperationsPerInvocation,用于在基准测试方法中有循环执行操作的逻辑时测量单次操作的性能。例如,
  @Benchmark
  @OperationsPerInvocation(10) // 每次调用基准测试方法,循环方法内有10次循环操作
  public void test() {
       for (int i = 0; i < 10; i++) {
           // 操作
       }
  }
JMH 微基准测试框架深度研究 摘要 JMH(Java Microbenchmark Harness)是OpenJDK团队开发的Java微基准测试框架,专为解决手写性能测试的固有缺陷而设计。其核心原理包括分阶段执行(预热与测量)、进程隔离、Blackhole防死码消除等技术,有效规避JIT编译优化(如常量折叠、循环展开)对测试结果的干扰。JMH通过标准化流程和统计校准,确保性能数据具备可重复性和置信度,广泛应用于算法对比、数据结构选型、性能优化验证等场景。关键陷阱包括死码消除、常量折叠和循环误用,需通过@Fork隔离、@State参数化和 阅读详情

相关推荐

【KITTI数据集中Raw_Data数据标定文件中的参数关系解读】

上一节本人将KITTI Odometry数据集中的参数文件进行了解释。本节主要针对一些做融合slam的人,将Raw_Data数据标定文件中的参数按照自己的理解做如下阐述。其中,所讲之处如有错误,欢迎各位批评指正。

weixin_43389152的博客 1526

Java性能调优杀手锏JMH

JMH(Java Microbenchmark Harness)由 OpenJDK/Oracle 里面那群开发了 Java编译器的大牛们所开发,是一个功能强大、灵活的工具,它可以用于检测和评估Java应用程序的性能,主要目的是测量Java应用程序的性能,尤其是在多线程环境下的性能。它使用自动生成的测试用例,来测量应用程序的性能,而不是简单的测量方法的性能。

7me 2042

【人工智能】AI算法系统设计与算法建模的详细阐述

AI算法系统设计与算法建模是人工智能领域中的核心任务之一,它涉及从问题定义、数据收集、算法选择、模型构建到系统部署的全过程。以下是对AI算法系统设计与算法建模的详细阐述

weixin_51306394的博客 4355

Java开源工具库使用之性能测试JMH

JMH(Java Microbenchmark Harness),是 OpenJDK 团队开发的一款基准测试工具,一般用于代码的性能比较和调优,精度甚至可以达到纳秒级别,适用于 java 以及其他基于 JVM 的语言。

十十办文武的博客 1619

Android布局基础与UI设计入门:打造精美应用界面

恭喜你!现在你已经掌握了Android UI开发的基础知识,包括各种布局类型、常用控件的使用以及一些UI优化技巧。这些知识将帮助你设计出既美观又实用的Android应用界面。

m0_65382359的博客 2056

Halcon实战:5种边缘检测算子对比(Sobel、Roberts、Prewitt、Kirsch、Canny)

本文深入对比了Halcon中Sobel、Roberts、Prewitt、Kirsch和Canny五大边缘检测算子的实战表现与核心差异。通过工业图像实例与代码解析,提供了基于噪声水平、边缘连续性及实时性要求的场景化选型指南,帮助工程师精准选择最适合的算子以优化视觉检测流程。

weixin_29266007的博客 392

Java基准测试利器OpenJDK-JMH

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33884611的博客 540

win11下的MySQL安装

目前官方最新版本是8.0.26,考虑到其稳定性、可靠性还需一定周期保证,所以使用官方版求稳定仍然建议5.7系列。3、选择MySQL Servers 5.7.38 -x64,然后按绿色箭头将选中的版本移植到右边选中框中。4、点击下方蓝色Advanced Options,选择安装位置。1、在开始界面搜索MySQL,点击command line。4、在“系统变量”中选择“path”,点击编辑。5、新建——>增加MySQL路径——>确定,12、execute,安装好后next。9、不需要做修改,直接点击next。.

rensweet的博客 2万+

OpenJDK JMH:Java 微基准测试指南

在日常 Java 开发工作中,我们会做很多的性能优化。然而,如何准确测量一段代码的性能?如何避免 JVM 的即时编译(JIT)和垃圾回收(GC)对测试结果的干扰?这就是 OpenJDK JMH(Java Microbenchmark Harness) 的核心价值。本文将深入探讨 JMH 的使用方法和适用场景,并通过实际案例帮忙我们快速入门。JMH 是 Java 开发者进行性能调优的有效工具,它能精确测量代码段微秒/纳秒下的性能,帮助开发者做出数据驱动的优化决策。

qq_43947876的博客 895

【Claude Code的Harness Engineering实现】:06-记忆系统(Memory)

记忆系统是Claude Code实现跨会话持久化和上下文保持的核心组件。它分为短期记忆(当前会话的对话历史)和长期记忆(跨会话保留的结构化信息),通过多层级的文件系统实现灵活的记忆管理。

rengang66的博客 240

帆软报表导出各种格式之后台导出

我们前面介绍了帆软报表在界面上的导出是通过类似的URL:http://localhost:8075/webroot/decision/view/report?op=export&sessionID=10653244-3e46-408c-bc54-f89a214a9bc7&format=image&extype=PNG 来完成的,就是带OP=export以及format参数来完成的。如果不从界面传参数,比如我们自己实现了一个HTTP接口,也可以通过传参数format来完成各种格式的导

帆软爱好者的专栏 4270

基于JMH做Benchmark基准测试

BenchMark 又叫做基准测试,主要用来测试一些方法的性能,可以根据不同的参数以不同的单位进行计算(例如可以使用吞吐量为单位,也可以使用平均时间作为单位,在 BenchmarkMode 里面进行调整)。Mode表示JMH进行Benchmark时所使用的模式。通常是测量的纬度不同,或是测量的方式不同。Throughput:整体吞吐量,例如“1秒内可以执行多少次调用”,单位是操作数/时间。AverageTime:调用的平均时间,例如“每次调用平均耗时xxx毫秒”,单位是时间/操作数。...

筱白爱学习!的博客 989

Proteus-51单片机-LCD1602显示DS1302时钟

本文详细介绍了如何使用Proteus仿真51单片机配合LCD1602显示DS1302时钟的步骤,包括DS1302时钟芯片的主要特性、引脚定义、外围电路以及LCD1602的原理和技术参数。此外,还讲解了LCD1602的指令集和显示字符的方法,并给出了初始化及显示操作的步骤。

让你爱上电路设计 6979

api压测工具_JAVA基准测试工具套件:JMH

JMH是OpenJDK的JIT团队开发的微基准测试框架,可针对基准方法在吞吐量、响应时间等维度进行纳秒/微秒/毫秒/秒级的性能基准测试。随着虚拟机的逐步优化,过去的一些常见说辞已经不再那么绝对,比如:final 修饰的变量性能更好,对象使用后赋null可以加快GC回收等。因此性能的好坏需要量化比较,JMH正是解决这方面的好工具。JMH典型用法:1.生成一个maven工程 mvn archetype...

weixin_39943678的博客 286

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JMH 性能测试框架

JMH 是一个由 OpenJDK/Oracle 里面那群开发了 Java 编译器的大牛们所开发的 Micro Benchmark Framework 。何谓 Micro Benchmark 呢?简单地说就是在method层面上的 benchmark,精度可以精确到微秒级。可以看出 JMH 主要使用在当你已经找出了热点函数,而需要对热点函数进行进一步的优化时,就可以使用 JMH 对优化的效果进行...

become a programmer 2037

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

基准测试神器 - JMH [ Java Microbenchmark Harness ]

一. 简介 JMH,全称 Java Microbenchmark Harness (微基准测试框架),是专门用于Java代码微基准测试的一套测试工具API,是由 OpenJDK/Oracle官方发布的工具。其精度可以达到毫秒级.可以执行一个函数需要多少时间,或者一个算法有多种不同实现等情况下,选择一个性能最好的那个. Java的基准测试需要注意的几个点: 测试前需要预热...

张伯毅的专栏 4217

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java基准测试工具 —— JMH使用指南

3.@Measurement —测试阶段可以指定迭代的次数,每次迭代的运行时间和每次迭代测试调用的数量(通常使用@BenchmarkMode(Mode.SingleShotTime)测试一组操作的开销——而不使用循环)。面对日益复杂的系统和不断增长的用户数,以及性能测试可能涉及到的多个业务系统,只有做到基准测试所涉及的业务场景、系统架构、测试环境等在可控状态下,才能得到相对准确的结果,为容量规划、缺陷定位、系统调优提供参考和依据。Mode.SampleTime 在测试中,随机进行采样执行的时间。

精准搬砖 2854

JMH - Java微基准测试工具套件

MH 是 OpenJDK 团队开发的一款基准测试工具,一般用于代码的性能调优,精度甚至可以达到纳秒级别,适用于 java 以及其他基于 JVM 的语言。和 Apache JMeter 不同,`JMH 测试的对象可以是任一方法,颗粒度更小,而不仅限于rest api`。

qq_31279701的博客 1511

sbt-jmh完全指南:如何在Scala项目中集成OpenJDK JMH基准测试

sbt-jmh是一款强大的sbt插件,专为Scala项目集成OpenJDK JMH(Java Microbenchmark Harness)基准测试框架而设计。通过它,开发者可以轻松地在Scala项目中编写、运行和分析微基准测试,从而精确评估代码性能,优化关键路径。 ## 📋 核心功能与优势 sbt-jmh插件为Scala开发者提供了完整的JMH集成方案,主要特性包括: - **无缝集成*

gitblog_00628的博客 346

基准测试工具--JMH(类似Junit)

JMH 进行 Benchmark 时所使用的模式

qq_44641527的博客 933

JMH的使用和代码

概述 JMH 是一个由 OpenJDK/Oracle 里面那群开发了 Java 编译器的大牛们所开发的 Micro Benchmark Framework 。何谓 Micro Benchmark 呢?简单地说就是在 method 层面上的 benchmark,精度可以精确到微秒级。可以看出 JMH 主要使用在当你已经找出了热点函数,而需要对热点函数进行进一步的优化时,就可以使用 JMH 对优化的效...

疯 2499

Java微基准测试框架JMH

JMH,即Java Microbenchmark Harness,这是专门用于进行代码的微基准测试的一套工具API。 JMH 由 OpenJDK/Oracle 里面那群开发了 Java 编译器的大牛们所开发 。何谓 Micro Benchmark 呢? 简单地说就是在 method 层面上的 benchmark,精度可以精确到微秒级。 Java的基准测试需要注意的几个点: 测试前需要预热。 防止...

张井天的博客 951

JMH - Java 微基准测试工具

点击上方“阿拉奇学Java”,选择“置顶或者星标”优质文章第一时间送达!推荐阅读 |前言"If you cannot measure it, you cannot i...

qq_36189144的博客 308

【Java优化实战】微基准系列使用JMH测试和提升应用程序和服务指南

JMH,全称Java Microbenchmark Harness (微基准测试框架),是专门用于Java代码微基准测试的一套测试工具API,是由Java虚拟机团队开发的的,一般用于代码的性能调优。

Java技术攻略的博客 627

JMH使用说明

JMH使用说明 一、概述 JMH,即Java Microbenchmark Harness,是专门用于代码微基准测试的工具套件。何谓Micro Benchmark呢?简单的来说就是基于方法层面的基准测试,精度可以达到微秒级。当你定位到热点方法,希望进一步优化方法性能的时候,就可以使用JMH对优化的结果进行量化的分析。和其他竞品相比——如果有的话,JM...

diaojin6880的博客 198

mg-styles-15 的声音也是代码:mgaudio 音乐合成工具包完全指南(15 种曲风与 103 个采样)

mg-styles-15 仓库里那 15 支 10 秒 MG 动画的配乐,没有一首是靠 DAW 手动剪出来的——它们全部由仓库自带的 Python 音乐合成工具包 **mgaudio** 生成。这个工具包能用代码合成振荡器、滤波、FM 音色,内置 15 种曲风配方(pop、synthwave、lofi、国潮……),并打包了 103 个 CC0 真实乐器采样(钢琴、马林巴、 Kalimba、中国大鼓

gitblog_01127的博客 437
上一篇: 使用yield*和function*修改默认的对象(key-value)或数组遍历顺序
下一篇: vue中通过props传值,一定是单向传值吗?如果是引用类型呢?
小鸡炖蘑菇Plus版
博客等级 码龄10年 10粉丝 27原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值