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

iis做的网站手机怎么访问企业网站怎么做产品图片轮播

iis做的网站手机怎么访问,企业网站怎么做产品图片轮播,中国购物网站排名,python 网站开发那个好这是我的第 207 期分享作者 | 武培轩来源 | 武培轩#xff08;ID#xff1a;wupeixuan404#xff09;分享 | Java中文社群#xff08;ID#xff1a;javacn666#xff09;磊哥在前面的所有性能优化的文章中都是用了这款性能测试工具——JMH#xff0c;一直没来得及给大家… 这是我的第 207 期分享作者 | 武培轩来源 | 武培轩IDwupeixuan404分享 | Java中文社群IDjavacn666磊哥在前面的所有性能优化的文章中都是用了这款性能测试工具——JMH一直没来得及给大家写一篇入门的教程刚好看到了这篇觉得非常不错于是今天就分享给大家希望对你有帮助。if 快还是 switch 快HashMap 的初始化 size 要不要指定指定之后性能可以提高多少各种序列化方法哪个耗时更短无论出自何种原因需要进行性能评估量化指标总是必要的。在大部分场合简单地回答谁快谁慢是远远不够的如何将程序性能量化呢这就需要我们的主角 JMH 登场了JMH 简介JMH(Java Microbenchmark Harness)是用于代码微基准测试的工具套件主要是基于方法层面的基准测试精度可以达到纳秒级。该工具是由 Oracle 内部实现 JIT 的大牛们编写的他们应该比任何人都了解 JIT 以及 JVM 对于基准测试的影响。当你定位到热点方法希望进一步优化方法性能的时候就可以使用 JMH 对优化的结果进行量化的分析。JMH 比较典型的应用场景如下想准确地知道某个方法需要执行多长时间以及执行时间和输入之间的相关性对比接口不同实现在给定条件下的吞吐量查看多少百分比的请求在多长时间内完成下面我们以字符串拼接的两种方法为例子使用 JMH 做基准测试。加入依赖因为 JMH 是 JDK9 自带的如果是 JDK9 之前的版本需要加入如下依赖目前 JMH 的最新版本为 1.23dependencygroupIdorg.openjdk.jmh/groupIdartifactIdjmh-core/artifactIdversion1.23/version /dependency dependencygroupIdorg.openjdk.jmh/groupIdartifactIdjmh-generator-annprocess/artifactIdversion1.23/version /dependency 编写基准测试接下来创建一个 JMH 测试类用来判断 和 StringBuilder.append() 两种字符串拼接哪个耗时更短具体代码如下所示BenchmarkMode(Mode.AverageTime) Warmup(iterations 3, time 1) Measurement(iterations 5, time 5) Threads(4) Fork(1) State(value Scope.Benchmark) OutputTimeUnit(TimeUnit.NANOSECONDS) public class StringConnectTest {Param(value {10, 50, 100})private int length;Benchmarkpublic void testStringAdd(Blackhole blackhole) {String a ;for (int i 0; i length; i) {a i;}blackhole.consume(a);}Benchmarkpublic void testStringBuilderAdd(Blackhole blackhole) {StringBuilder sb new StringBuilder();for (int i 0; i length; i) {sb.append(i);}blackhole.consume(sb.toString());}public static void main(String[] args) throws RunnerException {Options opt new OptionsBuilder().include(StringConnectTest.class.getSimpleName()).result(result.json).resultFormat(ResultFormatType.JSON).build();new Runner(opt).run();} } 其中需要测试的方法用 Benchmark 注解标识这些注解的具体含义将在下面介绍。在 main() 函数中首先对测试用例进行配置使用 Builder 模式配置测试将配置参数存入 Options 对象并使用 Options 对象构造 Runner 启动测试。另外大家可以看下官方提供的 jmh 示例 demohttp://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/执行基准测试准备工作做好了接下来运行代码等待片刻测试结果就出来了下面对结果做下简单说明# JMH version: 1.23 # VM version: JDK 1.8.0_201, Java HotSpot(TM) 64-Bit Server VM, 25.201-b09 # VM invoker: D:\Software\Java\jdk1.8.0_201\jre\bin\java.exe # VM options: -javaagent:D:\Software\JetBrains\IntelliJ IDEA 2019.1.3\lib\idea_rt.jar61018:D:\Software\JetBrains\IntelliJ IDEA 2019.1.3\bin -Dfile.encodingUTF-8 # Warmup: 3 iterations, 1 s each # Measurement: 5 iterations, 5 s each # Timeout: 10 min per iteration # Threads: 4 threads, will synchronize iterations # Benchmark mode: Average time, time/op # Benchmark: com.wupx.jmh.StringConnectTest.testStringBuilderAdd # Parameters: (length 100) 该部分为测试的基本信息比如使用的 Java 路径预热代码的迭代次数测量代码的迭代次数使用的线程数量测试的统计单位等。# Warmup Iteration 1: 1083.569 ±(99.9%) 393.884 ns/op # Warmup Iteration 2: 864.685 ±(99.9%) 174.120 ns/op # Warmup Iteration 3: 798.310 ±(99.9%) 121.161 ns/op 该部分为每一次热身中的性能指标预热测试不会作为最终的统计结果。预热的目的是让 JVM 对被测代码进行足够多的优化比如在预热后被测代码应该得到了充分的 JIT 编译和优化。Iteration 1: 810.667 ±(99.9%) 51.505 ns/op Iteration 2: 807.861 ±(99.9%) 13.163 ns/op Iteration 3: 851.421 ±(99.9%) 33.564 ns/op Iteration 4: 805.675 ±(99.9%) 33.038 ns/op Iteration 5: 821.020 ±(99.9%) 66.943 ns/opResult com.wupx.jmh.StringConnectTest.testStringBuilderAdd:819.329 ±(99.9%) 72.698 ns/op [Average](min, avg, max) (805.675, 819.329, 851.421), stdev 18.879CI (99.9%): [746.631, 892.027] (assumes normal distribution)Benchmark (length) Mode Cnt Score Error Units StringConnectTest.testStringBuilderAdd 100 avgt 5 819.329 ± 72.698 ns/op 该部分显示测量迭代的情况每一次迭代都显示了当前的执行速率即一个操作所花费的时间。在进行 5 次迭代后进行统计在本例中length 为 100 的情况下 testStringBuilderAdd 方法的平均执行花费时间为 819.329 ns误差为 72.698 ns。最后的测试结果如下所示Benchmark (length) Mode Cnt Score Error Units StringConnectTest.testStringAdd 10 avgt 5 161.496 ± 17.097 ns/op StringConnectTest.testStringAdd 50 avgt 5 1854.657 ± 227.902 ns/op StringConnectTest.testStringAdd 100 avgt 5 6490.062 ± 327.626 ns/op StringConnectTest.testStringBuilderAdd 10 avgt 5 68.769 ± 4.460 ns/op StringConnectTest.testStringBuilderAdd 50 avgt 5 413.021 ± 30.950 ns/op StringConnectTest.testStringBuilderAdd 100 avgt 5 819.329 ± 72.698 ns/op 结果表明在拼接字符次数越多的情况下StringBuilder.append() 的性能就更好。生成 jar 包执行对于一些小测试直接用上面的方式写一个 main 函数手动执行就好了。对于大型的测试需要测试的时间比较久、线程数比较多加上测试的服务器需要一般要放在 Linux 服务器里去执行。JMH 官方提供了生成 jar 包的方式来执行我们需要在 maven 里增加一个 plugin具体配置如下pluginsplugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-shade-plugin/artifactIdversion2.4.1/versionexecutionsexecutionphasepackage/phasegoalsgoalshade/goal/goalsconfigurationfinalNamejmh-demo/finalNametransformerstransformerimplementationorg.apache.maven.plugins.shade.resource.ManifestResourceTransformermainClassorg.openjdk.jmh.Main/mainClass/transformer/transformers/configuration/execution/executions/plugin /plugins 接着执行 maven 的命令生成可执行 jar 包并执行mvn clean install java -jar target/jmh-demo.jar StringConnectTest JMH 基础为了能够更好地使用 JMH 的各项功能下面对 JMH 的基本概念进行讲解BenchmarkMode用来配置 Mode 选项可用于类或者方法上这个注解的 value 是一个数组可以把几种 Mode 集合在一起执行如BenchmarkMode({Mode.SampleTime, Mode.AverageTime})还可以设置为 Mode.All即全部执行一遍。Throughput整体吞吐量每秒执行了多少次调用单位为 ops/timeAverageTime用的平均时间每次操作的平均时间单位为 time/opSampleTime随机取样最后输出取样结果的分布SingleShotTime只运行一次往往同时把 Warmup 次数设为 0用于测试冷启动时的性能All上面的所有模式都执行一次State通过 State 可以指定一个对象的作用范围JMH 根据 scope 来进行实例化和共享操作。State 可以被继承使用如果父类定义了该注解子类则无需定义。由于 JMH 允许多线程同时执行测试不同的选项含义如下Scope.Benchmark所有测试线程共享一个实例测试有状态实例在多线程共享下的性能Scope.Group同一个线程在同一个 group 里共享实例Scope.Thread默认的 State每个测试线程分配一个实例OutputTimeUnit为统计结果的时间单位可用于类或者方法注解Warmup预热所需要配置的一些基本测试参数可用于类或者方法上。一般前几次进行程序测试的时候都会比较慢所以要让程序进行几轮预热保证测试的准确性。参数如下所示iterations预热的次数time每次预热的时间timeUnit时间的单位默认秒batchSize批处理大小每次操作调用几次方法为什么需要预热因为 JVM 的 JIT 机制的存在如果某个函数被调用多次之后JVM 会尝试将其编译为机器码从而提高执行速度所以为了让 benchmark 的结果更加接近真实情况就需要进行预热。Measurement实际调用方法所需要配置的一些基本测试参数可用于类或者方法上参数和 Warmup 相同。Threads每个进程中的测试线程可用于类或者方法上。Fork进行 fork 的次数可用于类或者方法上。如果 fork 数是 2 的话则 JMH 会 fork 出两个进程来进行测试。Param指定某项参数的多种情况特别适合用来测试一个函数在不同的参数输入的情况下的性能只能作用在字段上使用该注解必须定义 State 注解。在介绍完常用的注解后让我们来看下 JMH 有哪些陷阱。JMH 陷阱在使用 JMH 的过程中一定要避免一些陷阱。比如 JIT 优化中的死码消除比如以下代码Benchmark public void testStringAdd(Blackhole blackhole) {String a ;for (int i 0; i length; i) {a i;} } JVM 可能会认为变量 a 从来没有使用过从而进行优化把整个方法内部代码移除掉这就会影响测试结果。JMH 提供了两种方式避免这种问题一种是将这个变量作为方法返回值 return a一种是通过 Blackhole 的 consume 来避免 JIT 的优化消除。其他陷阱还有常量折叠与常量传播、永远不要在测试中写循环、使用 Fork 隔离多个测试方法、方法内联、伪共享与缓存行、分支预测、多线程测试等感兴趣的可以阅读 https://github.com/lexburner/JMH-samples 了解全部的陷阱。JMH 插件大家还可以通过 IDEA 安装 JMH 插件使 JMH 更容易实现基准测试在 IDEA 中点击 File-Settings...-Plugins然后搜索 jmh选择安装 JMH pluginJMH plugin这个插件可以让我们能够以 JUnit 相同的方式使用 JMH主要功能如下自动生成带有 Benchmark 的方法像 JUnit 一样运行单独的 Benchmark 方法运行类中所有的 Benchmark 方法比如可以通过右键点击 Generate...选择操作 Generate JMH benchmark 就可以生成一个带有 Benchmark 的方法。还有将光标移动到方法声明并调用 Run 操作就运行一个单独的 Benchmark 方法。将光标移到类名所在行右键点击 Run 运行该类下的所有被 Benchmark 注解的方法都会被执行。JMH 可视化除此以外如果你想将测试结果以图表的形式可视化可以试下这些网站JMH Visual Charthttp://deepoove.com/jmh-visual-chart/JMH Visualizerhttps://jmh.morethan.io/比如将上面测试例子结果的 json 文件导入就可以实现可视化总结本文主要介绍了性能基准测试工具 JMH它可以通过一些功能来规避由 JVM 中的 JIT 或者其他优化对性能测试造成的影响。只需要将待测的业务逻辑用 Benchmark 注解标识就可以让 JMH 的注解处理器自动生成真正的性能测试代码以及相应的性能测试配置文件。最好的关系就是互相成就大家的在看、转发、留言三连就是我创作的最大动力。参考http://openjdk.java.net/projects/code-tools/jmh/深入拆解Java虚拟机《实战Java高并发程序设计》往期推荐 阿里巴巴为什么让初始化集合时必须指定大小啪啪打脸领导说try-catch要放在循环体外关注公众号发送”进群“磊哥拉你进读者群。
http://www.pierceye.com/news/678483/

相关文章:

  • 大学生网站建设课程总结唐四薪php网站开发答案
  • 郑州的网站建设公司有哪些企业策划案
  • 查询域名网站苏州专业网站seo推广
  • 游戏网站建设计划书梦织做网站
  • 电商运营公司简介seo搜索引擎优化求职简历
  • 烟台门户网站有哪些网站做的比较好的
  • 外贸企业论坛网站建设找建站公司做网站注意事项
  • 莱芜亓家网站网站认证怎么认证
  • 安康做网站的公司wordpress zh_cn.po
  • 温州网页网站制作怎么看一个网站有没有做301
  • 网站主流系统2018年网站建设
  • 好的交互网站sql网站发布流程
  • 河北住房与城乡建设部网站网站管理手册
  • 学网站建设需要用哪几个软件营销型网站建设的指导原则
  • 网站建设产品价格销售型网站如何做推广
  • 免费情感网站哪个好wordpress和微信打通
  • 做网站首页尺寸大小做网站的个人心得
  • 思乐科技 成都网站建设做单页网站价格
  • 网站关键词排名全掉了汽车用品网站
  • 网站未备案可以做经营活动吗做电商运营有前途吗
  • 网站建设优化服务百度指数与百度搜索量
  • 网站添加漂浮二维码怎么做内网 wordpress慢
  • h5创建网站网页设计主题推荐
  • 35开始学网站开发崇信县门户网
  • 一站式企业服务wordpress 网站登录
  • 网站上传工具有什么甘南北京网站建设
  • 株洲做网站那家好wordpress调用当前页文章
  • 想学做网站报班免费做一个自己app
  • 网站链接查询经典的公司简介范文
  • 网站猜你喜欢代码专门做房产的网站