在内部捕获异常耗时:12150142对于while(等同理)循环的优化

完成同样的功能,用不同的代码实现,性能上可能会有比较大的差异,所以对于一些性能敏感的模块,需要对代码进行一定程度的优化。今天,我们来聊聊java代码优化。今天主要讲一下for(while等价)循环的优化。

循环作为三大结构之一,我们在编写代码时经常会用到。循环结构让我们更方便地操作数组、集合等常规的东西千行代码bug率合理性,但是如果我们在实际开发中使用不合理,可能会对程序的性能产生很大的影响。所以我们还是需要掌握一些技巧来优化我们的代码。

嵌套循环

stratTime = System.nanoTime();
        for (int i = 0; i < 10000000; i++) {
            for (int j = 0; j < 10; j++) {
                
            }
        }
        endTime = System.nanoTime();
        System.out.println("外大内小耗时:"+ (endTime - stratTime));

应该改为:

stratTime = System.nanoTime();
        for (int i = 0; i <10 ; i++) {
            for (int j = 0; j < 10000000; j++) {
                
            }
        }//加入Java开发交流君样:756584822一起吹水聊天
        endTime = System.nanoTime();
        System.out.println("外小内大耗时:"+(endTime - stratTime));

两者耗时比较:

大外小耗时:200192114

大小的耗时:97995997

从上面的对比可以看出,优化后性能翻倍。嵌套循环应该遵循“外小内大”的原则,这就像复制很多小文件和复制几个大文件的区别一样。

提取与循环无关的表达式

fstratTime = System.nanoTime();
        for (int i = 0; i < 10000000; i++) {
            i=i*a*b;
        }
        endTime = System.nanoTime();
        System.out.println("未提取耗时:"+(endTime - stratTime));

应该改为:

stratTime = System.nanoTime();
        int size = list.size();
        for (int i = 0; i < size; i++) {
            
        }//加入Java开发交流君样:756584822一起吹水聊天
        endTime = System.nanoTime();
        System.out.println("优化list耗时:"+(endTime - stratTime));

两者耗时比较:

未优化列表耗时:27375

优化列表耗时:2444

list.size()每次循环都会执行一次千行代码bug率合理性,这无疑会影响程序的性能,所以应该放在循环外,换成一个变量,优化前后对比也很明显.

异常捕获

stratTime = System.nanoTime();
        for (int i = 0; i < 10000000; i++) {
            try {
            } catch (Exception e) {
            }
        }//加入Java开发交流君样:756584822一起吹水聊天
        endTime = System.nanoTime();
        System.out.println("在内部捕获异常耗时:"+(endTime - stratTime));

应该改为:

stratTime = System.nanoTime();
        try {
            for (int i = 0; i < 10000000; i++) {
            }//加入Java开发交流君样:756584822一起吹水聊天
        } catch (Exception e) {
        }
        endTime = System.nanoTime();
        System.out.println("在外部捕获异常耗时:"+(endTime - stratTime));

两者耗时比较:

内部捕获异常耗时:12150142

外部捕获异常耗时:1955

众所周知,捕获异常是非常耗费资源的,所以不要把try catch放在循环里面。优化后也有好几个数量级的提升。

性能优化有很多,代码优化只是其中的一小部分。我们应该在日常开发中养成良好的编码习惯。接下来,我将和大家讨论更多关于性能优化的问题,希望大家积极交流指导。

2020最新收集的一些高频面试题(全部整理成文档),干货很多,包括mysql、netty、spring、thread、spring cloud、jvm、源码、算法等都有讲解详细的,还有详细的学习计划、面试题等。

如需获取这些内容,请加Q先生:

756584822

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论