谈谈代码性能优化中的一些小细节

前一篇谈了一下代码中函数和接口命名的思路,今天针对我们日常代码中的一些小细节,谈谈我们可以优化的地方,希望对大家有用。

循环优化

明确一个概念,对方法的调用,即使方法中只有一句语句,也是有消耗的,包括创建栈帧、调用方法时保护现场、调用方法完毕时恢复现场等。所以例如下面的操作:

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) ,会减少程序很大的计算量。

一点小结

代码中可以优化的点,其实还有很多了,举这几个例子的目的,就是想说明一点,多思考,多留心每一条语句执行背后的细节,就可以有很大的收获和提高。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,863评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,337评论 18 399
  • 平时做的一些笔记,记不得出处了,知识共享吧 代码优化的目标是: 减小代码的体积 提高代码运行的效率 代码优化细节 ...
    mkitclear阅读 401评论 0 2
  • 前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什...
    H_Man阅读 1,229评论 4 36
  • 马云要让医院只负责诊疗诊断,其余付款、消费、预约、挂号全部让支付宝来做,在通过支付宝给医院、医生进行好评、差评!让...
    马小亮2013阅读 431评论 0 0

友情链接更多精彩内容