循环优化
明确一个概念,对方法的调用,即使方法中只有一句语句,也是有消耗的,包括创建栈帧、调用方法时保护现场、调用方法完毕时恢复现场等。所以例如下面的操作:
for (int i = 0; i < list.size(); i++) { ... }
建议替换为:
for (int i = 0, int length = list.size(); i < length; i++) { ... }
除此之外,如果在循环结构中,存在循环元素无关的逻辑判断条件的计算,比如 if(A > B && B > C)建议改为if(conditionD)。
2. 将循环变量无关的计算都放到循环外,这一条不解释。
3. 不要在循环中使用try…catch…,应该把其放在最外层。主要原因在于,如果循环中出现exception, try..catch在外层就直接跳出了循环,否则执行中抛出异常就会继续循环。
4.循环内不要不断创建对象引用
例如:
for (int i = 1; i <= count; i++) { Object obj = new Object(); }
这种做法会导致内存中有count份Object对象引用存在,count很大的话,就耗费内存了,建议为改为:
Object obj = null; for (int i = 0; i <= count; i++) { obj = new Object(); }
逻辑判断优化
1. 尽量采用“懒加载”的策略,即在需要的时候才创建
例如:
String str = "forest"; if (i == 1) { list.add(str); }
建议替换为:
if (i == 1) { String str = "forest"; list.add(str); }
2. switch 语句按照出现频率排序,让最常用的放在最前面,减少无效判断。
3. if 语句将弱计算的条件放在前面,避免过多的计算。
4. 字符串变量和字符串常量equals的时候将字符串常量写在前面,这是一个比较常见的小技巧了。 例如:
String str = "forest"; if (str.equals("forest")) { ... }
建议修改为:
String str = "forest"; if ("forest".equals(str)) { ... }
表达式优化
降低计算强度,乘法和除法使用移位操作, 使用移位代替整数2的倍数的乘除,
使用位运算代替取余运算。
例如:
for (val = 0; val < 100000; val += 5) { a = val * 8; b = val / 2; }
用移位操作可以极大地提高性能,因为在计算机底层,对位的操作是最方便、最快的,因此建议修改为:
for (val = 0; val < 100000; val += 5) { a = val << 3; b = val >> 1; }
2. 布尔逻辑优化,这一条也是平时大家不太注意的细节,例如,!a && !b 转换为!(a || b) ,会减少程序很大的计算量。
一点小结
代码中可以优化的点,其实还有很多了,举这几个例子的目的,就是想说明一点,多思考,多留心每一条语句执行背后的细节,就可以有很大的收获和提高。
免责声明:本文来源于,由网友提供或网络搜集,仅供个人研究、交流学习使用,不涉及商业盈利目的。如有版权问题,请联系本站管理员予以更改或删除。优知网会定期发布程序开发相关趋势文章,包括 PHP、 Linux、 Mysql 等领域,敬请关注!最后大家可以扫描下方的赞赏码支持我,感谢大家!