常见的代码性能优化

来源:互联网 发布:linux rsysnc 编辑:程序博客网 时间:2024/05/21 13:54

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

for (int i = 0; i < list.size(); i++){...}

建议替换成:

for (int i = 0, int length = list.size(); i < length; i++){...}

这样,在list.size()很大的时候,就减少了很多的消耗
2.尽量采用懒加载的策略,即在需要的时候才创建

String str = "aaa";if (i == 1){list.add(str);}

建议替换成:

if (i == 1){String str = "aaa";list.add(str);}

3.循环内不要不断创建对象引用

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(); }

这样的话,内存中只有一份Object对象引用,每次new Object()的时候,Object对象引用指向不同的Object罢了,但是内存中只有一份,这样就大大节省了内存空间了。
4.尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销
5.不要将数组声明为public static final
因为这毫无意义,这样只是定义了引用为static final,数组的内容还是可以随意改变的,将数组声明为public更是一个安全漏洞,这意味着这个数组可以被外部类所改变
6.将常量声明为static final,并以大写命名
7.不要创建一些不使用的对象,不要导入一些不使用的类
8.不要让public方法中有太多的形参
9.字符串变量和字符串常量equals的时候将字符串常量写在前面
这是一个比较常见的小技巧了,如果有以下代码:

String str = "123";if (str.equals("123")) {...}

建议修改为:

String str = "123";if ("123".equals(str)){...}

这么做主要是可以避免空指针异常
10.不要对数组使用toString()方法
11.把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+””最慢
所以以后遇到把一个基本数据类型转为String的时候,优先考虑使用toString()方法。至于为什么,很简单:
1、String.valueOf()方法底层调用了Integer.toString()方法,但是会在调用前做空判断
2、Integer.toString()方法就不说了,直接调用了
3、i + “”底层使用了StringBuilder实现,先用append方法拼接,再用toString()方法获取字符串
三者对比下来,明显是2最快、1次之、3最慢

原创粉丝点击