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

哪些网站可以做微商企业申报系统

哪些网站可以做微商,企业申报系统,免费网课平台,中英文网站开发公司这是我的第 206 期分享作者 | 王磊来源 | Java中文社群#xff08;ID#xff1a;javacn666#xff09;转载请联系授权#xff08;微信ID#xff1a;GG_Stone#xff09;哈喽#xff0c;亲爱的小伙伴们#xff0c;技术学磊哥#xff0c;进步没得说#xff01;欢迎来到… 这是我的第 206 期分享作者 | 王磊来源 | Java中文社群IDjavacn666转载请联系授权微信IDGG_Stone哈喽亲爱的小伙伴们技术学磊哥进步没得说欢迎来到新一期的性能解读系列我是磊哥。今天给大家带来的是关于 try-catch 应该放在循环体外还是放在循环体内的文章我们将从性能和业务场景分析这两个方面来回答此问题。很多人对 try-catch 有一定的误解比如我们经常会把它try-catch和“低性能”直接画上等号但对 try-catch 的本质是什么却缺少着最基础的了解因此我们也会在本篇中对 try-catch 的本质进行相关的探索。小贴士我会尽量用代码和评测结果来证明问题但由于本身认知的局限如有不当之处请读者朋友们在评论区指出。性能评测话不多说我们直接来开始今天的测试本文我们依旧使用 Oracle 官方提供的 JMHJava Microbenchmark HarnessJAVA 微基准测试套件来进行测试。首先在 pom.xml 文件中添加 JMH 框架配置如下!-- https://mvnrepository.com/artifact/org.openjdk.jmh/jmh-core -- dependencygroupIdorg.openjdk.jmh/groupIdartifactIdjmh-core/artifactIdversion{version}/version /dependency 完整测试代码如下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 java.util.concurrent.TimeUnit;/*** try - catch 性能测试*/ BenchmarkMode(Mode.AverageTime) // 测试完成时间 OutputTimeUnit(TimeUnit.NANOSECONDS) Warmup(iterations  1, time  1, timeUnit  TimeUnit.SECONDS) // 预热 1 轮每次 1s Measurement(iterations  5, time  5, timeUnit  TimeUnit.SECONDS) // 测试 5 轮每次 3s Fork(1) // fork 1 个线程 State(Scope.Benchmark) Threads(100) public class TryCatchPerformanceTest {private static final int forSize  1000; // 循环次数public static void main(String[] args) throws RunnerException {// 启动基准测试Options opt  new OptionsBuilder().include(TryCatchPerformanceTest.class.getSimpleName()) // 要导入的测试类.build();new Runner(opt).run(); // 执行测试}Benchmarkpublic int innerForeach() {int count  0;for (int i  0; i  forSize; i) {try {if (i  forSize) {throw new Exception(new Exception);}count;} catch (Exception e) {e.printStackTrace();}}return count;}Benchmarkpublic int outerForeach() {int count  0;try {for (int i  0; i  forSize; i) {if (i  forSize) {throw new Exception(new Exception);}count;}} catch (Exception e) {e.printStackTrace();}return count;} } 以上代码的测试结果为从以上结果可以看出程序在循环 1000 次的情况下单次平均执行时间为循环内包含 try-catch 的平均执行时间是 635 纳秒 ±75 纳秒也就是 635 纳秒上下误差是 75 纳秒循环外包含 try-catch 的平均执行时间是 630 纳秒上下误差 38 纳秒。也就是说在没有发生异常的情况下除去误差值我们得到的结论是try-catch 无论是在 for 循环内还是  for 循环外它们的性能相同几乎没有任何差别。try-catch的本质要理解 try-catch 的性能问题必须从它的字节码开始分析只有这样我能才能知道 try-catch 的本质到底是什么以及它是如何执行的。此时我们写一个最简单的 try-catch 代码public class AppTest {public static void main(String[] args) {try {int count  0;throw new Exception(new Exception);} catch (Exception e) {e.printStackTrace();}} } 然后使用 javac 生成字节码之后再使用 javap -c AppTest 的命令来查看字节码文件➜ javap -c AppTest  警告: 二进制文件AppTest包含com.example.AppTest Compiled from AppTest.java public class com.example.AppTest {public com.example.AppTest();Code:0: aload_01: invokespecial #1                  // Method java/lang/Object.init:()V4: returnpublic static void main(java.lang.String[]);Code:0: iconst_01: istore_12: new           #2                  // class java/lang/Exception5: dup6: ldc           #3                  // String new Exception8: invokespecial #4                  // Method java/lang/Exception.init:(Ljava/lang/String;)V11: athrow12: astore_113: aload_114: invokevirtual #5                  // Method java/lang/Exception.printStackTrace:()V17: returnException table:from    to  target type0    12    12   Class java/lang/Exception } 从以上字节码中可以看到有一个异常表Exception table:from    to  target type0    12    12   Class java/lang/Exception 参数说明from表示 try-catch 的开始地址to表示 try-catch 的结束地址target表示异常的处理起始位type表示异常类名称。从字节码指令可以看出当代码运行时出错时会先判断出错数据是否在 from 到 to 的范围内如果是则从 target 标志位往下执行如果没有出错直接 goto 到 return。也就是说如果代码不出错的话性能几乎是不受影响的和正常的代码的执行逻辑是一样的。业务情况分析虽然 try-catch 在循环体内还是循环体外的性能是类似的但是它们所代码的业务含义却完全不同例如以下代码public class AppTest {public static void main(String[] args) {System.out.println(循环内的执行结果  innerForeach());System.out.println(循环外的执行结果  outerForeach());}// 方法一public static int innerForeach() {int count  0;for (int i  0; i  6; i) {try {if (i  3) {throw new Exception(new Exception);}count;} catch (Exception e) {e.printStackTrace();}}return count;}// 方法二public static int outerForeach() {int count  0;try {for (int i  0; i  6; i) {if (i  3) {throw new Exception(new Exception);}count;}} catch (Exception e) {e.printStackTrace();}return count;} } 以上程序的执行结果为java.lang.Exception: new Exceptionat com.example.AppTest.innerForeach(AppTest.java:15)at com.example.AppTest.main(AppTest.java:5)java.lang.Exception: new Exceptionat com.example.AppTest.outerForeach(AppTest.java:31)at com.example.AppTest.main(AppTest.java:6)循环内的执行结果5循环外的执行结果3可以看出在循环体内的 try-catch 在发生异常之后可以继续执行循环而循环外的 try-catch 在发生异常之后会终止循环。因此我们在决定 try-catch 究竟是应该放在循环内还是循环外不取决于性能因为性能几乎相同而是应该取决于具体的业务场景。例如我们需要处理一批数据而无论这组数据中有哪一个数据有问题都不能影响请他组的正常执行此时我们可以把 try-catch 放置在循环体内而当我们需要计算一组数据的合计值时只要有一组数据有误我们就需要终止执行并抛出异常此时我们需要将 try-catch 放置在循环体外来执行。总结本文我们测试了 try-catch 放在循环体内和循环体外的性能发现二者在循环很多次的情况下性能几乎是一致的。然后我们通过字节码分析发现只有当发生异常时才会对比异常表进行异常处理而正常情况下则可以忽略 try-catch 的执行。但在循环体内还是循环体外使用 try-catch对于程序的执行结果来说是完全不同的因此我们应该从实际的业务出发来决定到 try-catch 应该存放的位置而非性能考虑。往期推荐 阿里巴巴为什么让初始化集合时必须指定大小局部变量竟然比全局变量快 5 倍关注公众号发送”进群“磊哥拉你进读者群。
http://www.yutouwan.com/news/32613/

相关文章:

  • 杭州网站免费制作wordpress新站注意事项
  • 网站的网络营销方案健身网站开发项目总结
  • html做网站怎么链接音乐太原网站建设培训学校
  • 免费在线代理网站网络设计接单
  • 什么是网站建设中的目录wordpress主题next推荐
  • 学校部门网站的建设深圳ui设计
  • 陕西省建设网站查询证件相片建设协会网站
  • 宁波免费做网站如何做网站menu菜单
  • 广州万安建设监理有限公司网站wordpress 插件 原理
  • 做网站需要域名吗wordpress媒体库 插件
  • 福州做网站的网站字体只能用
  • 中铁建设集团门户网站登陆同城引流用什么软件
  • 自己做网站的公司宁波正规优化seo公司
  • 做电商网站需要多少时间如何提升学历
  • 低价手机网站建设计算机网页设计实训报告
  • 做电脑游戏破解的网站建网站和app
  • 如何自己建造网站世界十大网站排名
  • 郑州网站设计培训广州seo排名外包
  • 石家庄建网站硬件工程师和软件工程师的区别
  • 做视频网站要注意什么企业门户网站设计论文
  • 网站外推和优化绍兴cms建站系统
  • 怎么把电脑网站做服务器吗网站首页结构布局
  • 数据交易网站源码查失信被执行人名单查询
  • 西城做网站个人网站的设计和建设
  • 深圳装修公司网站室内设计师排名
  • 网站建设与管理课程报告wordpress去除tag
  • 提升网站流量该怎么做广西住建领域培训考试系统
  • 学技巧网站制作北京网站建站推
  • 企业网站的建设有哪些经典问题wordpress应用app主题
  • 青海wap网站建设公司广告推广哪个平台好