首先,代码优化的目的:
1.减小代码的体积;
2.提高代码运行效率。
优化总结:
(1)尽量指定类、方法的final修饰符
1.带有final修饰符的类是不可派生的。final修饰的类不可被继承,fianl修饰的方法不可被重写。
2.final修饰的类中,所有的方法修饰final的。
3.在java核心API中,也有许多应用final的例子,比如java.lang.String,整个类都是final修饰的。
4.java编译器会自动寻找机会内联所有的final方法,内联对于提升java运行效率有很大作用。
(2)尽量重用对象
特别是java、android中对string的使用:出现字符串连接时应该使用StingBuffer/StingBuild代替。
因为java虚拟机不仅要花时间生成这些对象,以后还可能要花时间对这些对象进行垃圾回收和处理。
(3)尽可能使用局部变量
调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中速度较快,
而其他变量(如静态变量、实例变量)都保存在堆中,速度较慢。
另外,栈中创建的变量,随着方法的运行结束,也就随着消失了,不需要额外的垃圾回收。
(4)尽量减少对变量的重复计算,特别是在循环中
比如:for(int i=0; i<list.size(); i++){....}
建议修改为:for(int i=0, int length = list.size(); i<length; i++){....}
这样当length很大时,就减少了很多的计算消耗。
(5)尽量采用懒加载的策略,即在需要的时候才创建,比如:
String str = "aaa";
if(i==1){
list.add(str);
}
修改为:
if(i==1){
String str = "aaa"; //需要时才创建
list.add(str);
}
(6)当复制大量数据时,使用System.arraycopy();
(7)循环内尽量不要不断创建对象引用,例如:
for(int i= 0; i<count; i++){
Object obj = new Object();
}
这样做会 导致内存中有count份的Object对象引用存在,耗费内存。
建议改为:
Object obj = null;
for(int i= 0; i<count; i++){
obj= new Object();
}
这样的话,内存中只有一份Object对象的引用,当每次new Object()时,Object对象引用只是指向不同的Object,但内存中只有一份,节省内存。(8)对外提供的public方法,使用尽量少的形参。
(9)当字符串变量和字符串常量equals时,将常量写在前面,可以避免空指针异常,比如:
String str = "123";
if(str.equals("123")){
...
}
改为
String str = "123";
if("123".equals(str)){
...
}
未完待续。。。。