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

做网站那个平台淄博高端网站建设乐达

做网站那个平台,淄博高端网站建设乐达,网站系统建设预算,企业通讯录这段时间接手项目出现各种问题,令人不胜烦扰。吐槽下公司做项目完全靠人堆,大上快上风格注定留下一地鸡毛,修修补补不如想如何提升同事代码水准免得背锅。偶然看到关于JMH对于优化java代码的直观性,于是有了这篇文章,希…

       这段时间接手项目出现各种问题,令人不胜烦扰。吐槽下公司做项目完全靠人堆,大上快上风格注定留下一地鸡毛,修修补补不如想如何提升同事代码水准免得背锅。偶然看到关于JMH对于优化java代码的直观性,于是有了这篇文章,希望能帮到大家。

一:基础介绍文章

基准测试神器JMH——详解36个官方例子 - 知乎

这里介绍引入项目方式,各种基本注解用法,用例。比较全面,推荐大家学习

二:boot项目实用

注意事项:1.jdk版本大于9,最好使用的openJDK,其他的也行

                   2.做测试最好放在test包下,不影响正常项目使用

2-1 一般项目优化需求:

       一个简单方法,一个service接口(这个比较多。下面以这个为例)

场景1: 有个根据实例获取报警信息的接口  

        需求是要测试下,不同的多个实例对接口相应的影响,这里我分成1.2.3

直接test文件下新建

import com.chitic.things.device.api.request.monitor.AlarmSnsRequest;
import com.chitic.things.device.service.MonitorOnlineService;
import org.springframework.boot.SpringApplication;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.results.format.ResultFormatType;
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;/*** 类功能说明: //** @author Zhouxl* @date 2023/8/10 14:25*/
@BenchmarkMode(Mode.AverageTime)  
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@State(Scope.Benchmark)
@Warmup(iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS)  //仿JVM进行预热行为,提高命中率(1s 3次)
public class BenchmarkTest {private ConfigurableApplicationContext context;private MonitorOnlineService onlineService;@Setuppublic void init() {// 这里的WebApplication.class是项目里的spring boot启动类context = SpringApplication.run(CommonApplication.class);// 获取需要测试的beanthis.onlineService = context.getBean(MonitorOnlineService.class);}@Benchmarkpublic  void one(){AlarmSnsRequest snsRequest =new AlarmSnsRequest();String str="test";snsRequest.setSns(Arrays.asList(str.split(",")));//测试接口方法onlineService.alarmPageBySns(snsRequest);}@Benchmarkpublic  void two(){AlarmSnsRequest snsRequest =new AlarmSnsRequest();String str="test,test1";snsRequest.setSns(Arrays.asList(str.split(",")));//测试接口方法onlineService.alarmPageBySns(snsRequest);}@Benchmarkpublic  void three(){AlarmSnsRequest snsRequest =new AlarmSnsRequest();String str="test,test1,test2";snsRequest.setSns(Arrays.asList(str.split(",")));//测试接口方法onlineService.alarmPageBySns(snsRequest);}@TearDownpublic void down() {context.close();}public static void main(String[]  args)throws RunnerException {Options opts = new OptionsBuilder().include(BenchmarkTest.class.getSimpleName()).resultFormat(ResultFormatType.JSON)   //导出json 可通过 http://deepoove.com/jmh-visual-chart/ 对比//.addProfiler(StackProfiler.class)      //栈内存解析,主要分析方法的耗时情况// .addProfiler(GCProfiler.class)           //JVM GC的情况 各区的情况(G1的垃圾回收器情况)//.addProfiler(HotspotMemoryProfiler.class)   //使用HotSpot VM 进行内存占用分析.forks(1)    //进程数.build();new Runner(opts).run();}
}

测试结果:1个时耗时大概0.38s,2个和3个消耗会增加,但区别不大

可以在项目中对任意接口进行测试,还可以图形化接口比较,直接体现你的优化价值

JMH Visual Chart      生成的json引入这里生成图标

2-2  接口分析需求

场景2: 有个接口一直导致卡死或者内存OOM,代码是依托答辩,看了头晕

这里就需要借助JVM对堆栈内存,找出耗时情况,哪种应对哪个情况我已经上面列出来了:

package com.chitic.demo.controller.demo;import com.chitic.demo.Application;
import com.chitic.demo.controller.HartCheck;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.profile.GCProfiler;
import org.openjdk.jmh.profile.HotspotMemoryProfiler;
import org.openjdk.jmh.profile.StackProfiler;
import org.openjdk.jmh.results.format.ResultFormatType;
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.springframework.boot.SpringApplication;
import org.springframework.context.ConfigurableApplicationContext;import java.util.Arrays;
import java.util.concurrent.TimeUnit;/*** 类功能说明: //对堆栈和GC内部** @author Zhouxl* @date 2023/8/10 14:59*/
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@State(Scope.Benchmark)
@Warmup(iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS)  //仿JVM进行预热行为,提高命中率(1s 3次)
public class JvmTest {private ConfigurableApplicationContext context;private HartCheck hartCheck;@Setuppublic void init() {// 这里的WebApplication.class是项目里的spring boot启动类context = SpringApplication.run(Application.class);// 获取需要测试的beanthis.hartCheck = context.getBean(HartCheck.class);}@Benchmarkpublic  void one(){//测试接口方法hartCheck.getUser();}@TearDownpublic void down() {context.close();}public static void main(String[]  args)throws RunnerException {Options opts = new OptionsBuilder().include(JvmTest.class.getSimpleName()).addProfiler(StackProfiler.class)      //栈内存解析,主要分析方法的耗时情况
//                .addProfiler(GCProfiler.class)           //JVM GC的情况 各区的情况(G1的垃圾回收器情况)
//                .addProfiler(HotspotMemoryProfiler.class)   //使用HotSpot VM 进行内存分析.resultFormat(ResultFormatType.JSON)   //导出json 可通过 http://deepoove.com/jmh-visual-chart/ 对比.forks(1)    //进程数.build();new Runner(opts).run();}}

2-2-1.addProfiler(StackProfiler.class)      //栈内存解析,主要分析方法的耗时情况

栈内存分析,主要看这些内容:

 就可以看到栈内耗时情况了,然后动手处理

2-2-2.addProfiler(GCProfiler.class) //JVM GC的情况 各区的情况(G1的垃圾回收器情况)

G1垃圾回收器的各种状态情况

2-2-3..addProfiler(HotspotMemoryProfiler.class)    //使用HotSpot VM 进行内存分析

展示数据和jstack的类似,能快速定位到哪些类占用内存,因为我的项目用的是graalvm17没办法用,只能各位自行探索了

 

 

http://www.yayakq.cn/news/164185/

相关文章:

  • 程序员做笔记的网站制作app的教程
  • 越秀免费网站建设网站登陆界面psd
  • 小兽 wordpress台州企业网站seo
  • asp程序网站后台发布产品的时候前台怎么不显示产品名称代刷开通建设网站
  • 学校网站建设栏目设置企业注册登记
  • 网站关键词添加安徽优化开发区
  • 资讯网站优化排名自己做网站并让别人访问
  • 江苏屹峰建设网站ckplayer wordpress
  • 一级a做爰网站中国开网页速度慢
  • 江西城乡建设部网站首页旅游建设门户网站的方案
  • 设计公司品牌网站怎么做品牌的官方网站
  • 品牌网站建设福州网站建设网站制作需要多少钱
  • 如何创建个人网站免费关系营销案例
  • 东莞网站优化排名公司怎么用手机网站做软件
  • 做食品研发都有哪些网站可以免费创建网站的软件
  • 个人怎么做网站页面网站建设 笔记
  • 威县做网站哪里便宜汕头建站平台
  • 网站网站建设报价蓝田微网站建设
  • wordpress ssl长沙关键词优化报价
  • 打开一个网站在建设中wordpress模板开发
  • 大连建网站电话wordpress如何写个插件
  • 爱站工具查询石家庄seo推广公司
  • 东阳市建设局网站广州有什么好玩的东西
  • 长春做网站的电话推广计划ppt
  • 在线教育网站有哪些免费编程软件小学生
  • 河源市住宅和城乡规划建设局网站网站设计编辑
  • 长沙网站se0推广优化公司专门做任务的网站6
  • 建设网站怎样赚钱品牌设计网站公司
  • 做网站教程第一课彩票开奖网站开发
  • 平面设计师必看的网站电商扶贫网站建设