java性能优化之for循环

来源:互联网 发布:软件系统架构类型 编辑:程序博客网 时间:2024/06/05 20:54

完成同样的功能,用不同的代码来实现,性能上可能会有比较大的差别,所以对于一些性能敏感的模块来说,对代码进行一定的优化还是很有必要的。今天就来说一下java代码优化的事情,今天主要聊一下对于for(while等同理)循环的优化。

作为三大结构之一的循环,在我们编写代码的时候会经常用到。循环结构让我们操作数组、集合和其他一些有规律的事物变得更加的方便,但是如果我们在实际开发当中运用不合理,可能会给程序的性能带来很大的影响。所以我们还是需要掌握一些技巧来优化我们的代码的。

嵌套循环

复制代码
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++) {

        }    }    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();
c = a*b;
for (int i = 0; i < 10000000; i++) {
i=i*c;
}
endTime = System.nanoTime();
System.out.println(“已提取耗时:”+(endTime - stratTime));
复制代码

两者耗时对比:

未提取耗时:45973050
已提取耗时:1955
代码中a+b与我们的循环无关,所以应该把它放到外面,避免重复计算,可以看出,优化后性能提升了好几个数量级,这些是不容忽视的。

消除循环终止判断时的方法调用

复制代码
stratTime = System.nanoTime();
for (int i = 0; i < list.size(); i++) {

    }    endTime = System.nanoTime();    System.out.println("未优化list耗时:"+(endTime - stratTime));

复制代码

应改为:

复制代码
stratTime = System.nanoTime();
int size = list.size();
for (int i = 0; i < size; i++) {

    }    endTime = System.nanoTime();    System.out.println("优化list耗时:"+(endTime - stratTime));

复制代码

两者耗时对比:

未优化list耗时:27375
优化list耗时:2444
list.size()每次循环都会被执行一次,这无疑会影响程序的性能,所以应该将其放到循环外面,用一个变量来代替,优化前后的对比也很明显。

异常捕获

复制代码
stratTime = System.nanoTime();
for (int i = 0; i < 10000000; i++) {
try {
} catch (Exception e) {
}
}
endTime = System.nanoTime();
System.out.println(“在内部捕获异常耗时:”+(endTime - stratTime));
复制代码

应改为:

复制代码
stratTime = System.nanoTime();
try {
for (int i = 0; i < 10000000; i++) {
}
} catch (Exception e) {

    }    endTime = System.nanoTime();    System.out.println("在外部捕获异常耗时:"+(endTime - stratTime));

复制代码
两者耗时对比:

在内部捕获异常耗时:12150142
在外部捕获异常耗时:1955

大家都知道,捕获异常是很耗资源的,所以不要讲try catch放到循环内部,优化后同样有好几个数量级的提升。

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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 游戏联不了网络怎么办 光敏印章进水了怎么办 照片打印出来黑怎么办 企业股东签名不符怎么办 电脑签字签不了怎么办 刘海的碎发怎么办 车牌号全是单数怎么办 品正通保车险超市怎么办营业执照 车辆咨询服务门市怎么办营业执照 被互盾科技骗了怎么办 家具生意不好怎么办啊 今年家具店生意不好怎么办 奶茶店位置不好怎么办 早餐店位置不好怎么办 木工做的不好怎么办 淘宝昵称改不了怎么办 淘宝店关门售后怎么办 店里生意不好怎么办?解决方案 淘宝店铺没有生意怎么办 淘宝店做大了应该怎么办 汽车维修没生意怎么办 淘宝买家具安装怎么办 投标时未记主材费结算时怎么办 不敢买自慰棒怎么办 车被扎了个洞怎么办 企业欠税交不起怎么办 组织代码查不到怎么办 u盾电量不足怎么办 对公账户拍照怎么办 个人怎么办对公账户 车辆超过年检日期怎么办 手机cpu负载过高怎么办 移动数据上网慢怎么办 服务器密码忘记了怎么办 网吧电脑卡死了怎么办 局域网连接不上怎么办 电脑没有dns地址怎么办 无法连接版本服务器怎么办 登录游戏就死机怎么办 亿企薪税保没有绑定企业怎么办 众筹如果不成功怎么办