当前位置: 首页 > news >正文

java之jmh初识及使用

最近有场景需要数据支撑json的toJsonString方法和java原生的toString方法的运行速度,因此选用了JMH测试工具。

以下代码大致意思是:初始化一个list集合,放入100个对象,然后遍历这个集合,调用fastjson的toJsonString方法和对象的toString方法。

这100个对象属性值拼接了list的下标,防止字符串常量池中存在相同的字符。

实体类代码:

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Date;@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class TestDto {private Integer id;private String name;private String address;private Date date;private boolean aBoolean;private double aDouble;private float aFloat;}

jmh测试代码如下:


import com.alibaba.fastjson.JSON;
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 org.openjdk.jmh.runner.options.TimeValue;import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@State(Scope.Thread)
public class JmhTest {private List<TestDto> list;/*** 初始化准备工作*/@Setup(Level.Iteration)public void setUp() {this.list = new ArrayList<>();for (int i = 0; i < 100; i++) {TestDto testDto = TestDto.builder().id(i).name("xiaoming" + i).address("beijing" + i).date(new Date()).aDouble(i).aBoolean(true).aFloat(i).build();list.add(testDto);}}/*** 方法1*/@Benchmarkpublic void toJSONStringTest() {for (TestDto testDto : list) {String res = JSON.toJSONString(testDto);}}/*** 方法2*/@Benchmarkpublic void toStringTest() {for (TestDto testDto : list) {String res = testDto.toString();}}public static void main(String[] args) throws RunnerException {final Options opts = new OptionsBuilder().include(JmhTest.class.getSimpleName()).forks(1)// 多少次测量迭代.measurementIterations(10)// 每次测量迭代需要多长时间.measurementTime(TimeValue.microseconds(1000000L))// 进行多少次预热迭代.warmupIterations(1)// 每次预热迭代需要多长时间.warmupTime(TimeValue.microseconds(1000000L)).build();new Runner(opts).run();}
}

运行结果如下:

# JMH version: 1.19
# VM version: JDK 1.8.0_282, VM 25.282-b08
# VM invoker: D:\corretto-1.8.0_282\jre\bin\java.exe
# VM options: -javaagent:D:\IntelliJ IDEA 2020.3.3\lib\idea_rt.jar=56086:D:\IntelliJ IDEA 2020.3.3\bin -Dfile.encoding=UTF-8
# Warmup: 1 iterations, 1000000 us each
# Measurement: 10 iterations, 1000000 us each
# Timeout: 10 min per iteration
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Average time, time/op
# Benchmark: com.honor.wpshowdemo.serverone.test.JmhTest.toJSONStringTest# Run progress: 0.00% complete, ETA 00:00:22
# Fork: 1 of 1
# Warmup Iteration   1: 977.533 us/op
Iteration   1: 66.566 us/op
Iteration   2: 61.137 us/op
Iteration   3: 66.597 us/op
Iteration   4: 54.270 us/op
Iteration   5: 54.927 us/op
Iteration   6: 53.950 us/op
Iteration   7: 54.212 us/op
Iteration   8: 54.328 us/op
Iteration   9: 54.574 us/op
Iteration  10: 54.343 us/opResult "com.honor.wpshowdemo.serverone.test.JmhTest.toJSONStringTest":57.490 ±(99.9%) 7.924 us/op [Average](min, avg, max) = (53.950, 57.490, 66.597), stdev = 5.241CI (99.9%): [49.566, 65.414] (assumes normal distribution)# JMH version: 1.19
# VM version: JDK 1.8.0_282, VM 25.282-b08
# VM invoker: D:\corretto-1.8.0_282\jre\bin\java.exe
# VM options: -javaagent:D:\IntelliJ IDEA 2020.3.3\lib\idea_rt.jar=56086:D:\IntelliJ IDEA 2020.3.3\bin -Dfile.encoding=UTF-8
# Warmup: 1 iterations, 1000000 us each
# Measurement: 10 iterations, 1000000 us each
# Timeout: 10 min per iteration
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Average time, time/op
# Benchmark: com.honor.wpshowdemo.serverone.test.JmhTest.toStringTest# Run progress: 50.00% complete, ETA 00:00:13
# Fork: 1 of 1
# Warmup Iteration   1: 105.282 us/op
Iteration   1: 80.594 us/op
Iteration   2: 64.168 us/op
Iteration   3: 63.157 us/op
Iteration   4: 63.548 us/op
Iteration   5: 63.345 us/op
Iteration   6: 64.605 us/op
Iteration   7: 63.592 us/op
Iteration   8: 63.363 us/op
Iteration   9: 64.166 us/op
Iteration  10: 63.580 us/opResult "com.honor.wpshowdemo.serverone.test.JmhTest.toStringTest":65.412 ±(99.9%) 8.094 us/op [Average](min, avg, max) = (63.157, 65.412, 80.594), stdev = 5.353CI (99.9%): [57.318, 73.505] (assumes normal distribution)# Run complete. Total time: 00:00:25Benchmark                 Mode  Cnt   Score   Error  Units
JmhTest.toJSONStringTest  avgt   10  57.490 ± 7.924  us/op
JmhTest.toStringTest      avgt   10  65.412 ± 8.094  us/opProcess finished with exit code 0

结论如下:

对象属性只有7个的时候,fastjson的toJsonString方法明显优于对像的toString方法。

ps:

不过,当对象属性更少时,toString方法是优于toJosnString方法,这个验证过程没有发出来,大家也可以自行验证。

相关文章:

java之jmh初识及使用

最近有场景需要数据支撑json的toJsonString方法和java原生的toString方法的运行速度&#xff0c;因此选用了JMH测试工具。 以下代码大致意思是&#xff1a;初始化一个list集合&#xff0c;放入100个对象&#xff0c;然后遍历这个集合&#xff0c;调用fastjson的toJsonString方…...

利用状态监测和机器学习提高冷却塔性能的具体方法

在现代工业生产中&#xff0c;冷却塔扮演着至关重要的角色&#xff0c;它们的性能直接影响着工艺流程的稳定性和效率。为了确保冷却塔的正常运行和减少系统故障&#xff0c;状态监测和机器学习成为了关键技术。 图.冷却塔&#xff08;PreMaint&#xff09; 在前文《基于人工智…...

LeetCode_02_1289. 下降路径最小和 II

1289. 下降路径最小和 II 给你一个 n x n 整数矩阵 grid &#xff0c;请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路径 定义为&#xff1a;从 grid 数组中的每一行选择一个数字&#xff0c;且按顺序选出来的数字中&#xff0c;相邻数字不在原数组的同一列。 示…...

consul servicecheck 查看健康信息

在浏览器中地址栏输入如下信息&#xff1a;http://localhost:8500/v1/agent/checks 返回信息如下&#xff1a; { "service:springboot-security-oauth2-zuul-sso-server-1881": { "Node": "8DBQ2F05HUXZ2QO", "Check…...

什么是信息孤岛?如何打破信息孤岛?

一文让你看懂&#xff1a;什么是信息孤岛&#xff1f;信息孤岛形成的原因&#xff1f;以及如何打破信息孤岛&#xff1f; 本文重点结合了企业信息系统的需求&#xff0c;给出了整合企业现有信息系统的方法&#xff0c;能有效解决企业信息孤岛的问题&#xff0c;并帮助企业快速…...

Android开源 Skeleton 骨架屏

目录 一、简介 二、效果图 三、引用 Skeleton 添加jitpack 仓库 添加依赖: 四、使用 Skeleton 1、VIew 骨架屏使用 ViewSkeletonScreen 2、列表类View 骨架屏 RecyclerViewSkeletonScreen、GridViewSkeletonScreen、 ListViewSkeletonScreen 一、简介 骨架屏的作用是…...

都说IT就业难?到底难在哪?

现在网上关于IT行业&#xff0c;劝退的帖子真的很多&#xff0c;很多人看了后无比焦虑&#xff0c;没入行的&#xff0c;还没开始学&#xff0c;就担心找不到工作了&#xff1b;在行业内的&#xff0c;想跳槽的也纷纷开始摆烂&#xff0c;觉得市场根本没啥机会&#xff0c;简历…...

STM32芯片的内部架构介绍

STM32芯片由内核和片上外设两部分组成。STM32F103采用Cortex-M3内核&#xff0c;该内核由ARM公司设计。芯片生产厂商ST则负责在内核之外设计部件并生产整个芯片。这些内核之外的部件被称为核外外设或片上外设&#xff0c;如GPIO、USART&#xff08;串口&#xff09;、I2C、SPI等…...

Angular FormControl value属性的一些事

背景&#xff1a;一个输入校验&#xff0c;允许输入多行&#xff0c;每一行是ip或网段。写了个校验&#xff0c;将其按行拆分后单独校验。 1. FormControl无法深复制 使用JSON.parse(JSON.stringify(control))进行简单深复制报错&#xff0c;因为不是json类型&#xff1b;使用d…...

Nim游戏:取石头

&#xff08;一&#xff09;一堆取石头 背景&#xff1a; 在博弈论中&#xff0c;有一种称为Nim游戏的经典问题&#xff0c;它涉及到取石子的问题&#xff0c;其中有许多变种。Nim游戏是一种零和博弈&#xff0c;即两名玩家交替行动&#xff0c;每次只能从一堆物品中取走一定数…...

springboot国际化

springboot国际化 不需要引入额外的jar包 参考&#xff1a;https://zhuanlan.zhihu.com/p/551605839 1.rources要创建Resource Bundle 2.yml配置中引入Resource Bundle 引入Resource Bundle spring:messages:encoding: UTF-8basename: i18n/messages_common3.创建国际化工具…...

12种不宜使用的Javascript语法

1. Javascript有两组相等运算符&#xff0c;一组是和!&#xff0c;另一组是和!。前者只比较值的相等&#xff0c;后者除了值以外&#xff0c;还比较类型是否相同。 请尽量不要使用前一组&#xff0c;永远只使用和!。因为默认会进行类型转换&#xff0c;规则十分难记。如果你…...

vue3+element-plus点击列表中的图片预览时,图片被表格覆盖

文章目录 问题解决 问题 视觉 点击图片进行预览&#xff0c;但还能继续选中其他的图片进行预览&#xff0c;鼠标放在表格上&#xff0c;那一行表格也会选中&#xff0c;如图所示第一行的效果。 代码 <el-table-column prop"id" label"ID" width"…...

flutter:二维码生成与读取

前言 这csdn真的是服了&#xff0c;图片里有个二维码就直接变成违规图片了。至于效果的话&#xff0c;自己运行一下看看吧。 生成 flutter中生成二维码可以使用 qr_flutter。 官方文档 https://pub-web.flutter-io.cn/packages/qr_flutter 安装 flutter pub add qr_flutt…...

Camunda 7.x 系列【14】核心概念

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源码地址:https://gitee.com/pearl-organization/camunda-study-demo 文章目录 1. 流程定义1.1 Key1.2 版本1.3 挂起2. 流程实例3. 执行4. 活动实例5. 作业和作业定义本篇文…...

matplotlib 笔记:hist2d 2D直方图

创建二维直方图&#xff0c;用于显示数据分布的图表将数据划分成不同的区间&#xff08;bin&#xff09;&#xff0c;并统计每个区间内数据点的数量 1 基本画法 默认bin的数量是10*10 N 1000 x np.random.randn(N) y np.random.randn(N) plt.hist2d(x, y) 2 修改bin的…...

数据库优化脚本执行报错

目录 一、执行数据库优化脚本 报错... 3 解决方法&#xff1a;... 4 1、直接注释掉RECYCLE_POOLS 赋值sql语句块... 4 2、手动修改脚本... 5 附录... 6 一、执行数据库优化脚本 报错 AutoParaAdj3.5_dm8.sql 1&#xff09;manager中报错 -20001: 执行失败, -7065 数据未…...

TopN漏洞--sql注入

sql注入 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理员不知情的情况下实现非法操作&#xff0c;以此来实现欺骗数据库服务器执行非授权的任意查…...

【论文阅读】UNICORN:基于运行时来源的高级持续威胁检测器(NDSS-2020)

UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats NDSS-2020 哈佛大学 Han X, Pasquier T, Bates A, et al. Unicorn: Runtime provenance-based detector for advanced persistent threats[J]. arXiv preprint arXiv:2001.01525, 2020. 源码&…...

Linux的基本介绍和常用命令

Linux和Windows的主要区别 Linux和Windows是两种具有不同特性的操作系统&#xff0c;它们具有各自的优点和适用场景。选择哪一个操作系统主要取决于用户的需求、技术背景及使用场景等。 Linux和Windows的主要区别如下&#xff1a; 开源VS闭源&#xff1a;Linux是开源的系统&…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...