java优化

1. 对于明确不需要派生的类,添加final修饰符,此时该类的所有方法都是final的。Java编译器会寻找机会内联(inline)所有的final方法。(能使性能提升50%)
2. 尽量重用对象,避免生成过多的对象。对于String的连接,用StringBuffer代替。
3. 尽量少用全局变量如static等(heap中创建,慢),多用局部变量(Stack中创建,快)。
4. 不要重复初始化变量。默认情况下,调用类的构造函数时, Java会把变量初始化成确定的值:所有的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和 double变量设置成0.0,逻辑值设置成false。当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数都会被自动调用。即

class test{
private Object obj; //不需要写成 private Object obj=null;
}
例如:
for(int i=0; i<list.size(); i++)
应替换为:
for(int i=0, int len=list.size(); i< len; i++)

10. 需要时才创建变量或者对象。
例如:

String str=”hello”;

if(i==1){

list.add(str);

}

应替换为

if(i==1){

String str=”hello”;

list.add(str);

}

复制代码

11. 慎用异常
异常对性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。
异常只能用于错误处理,不应该用来控制程序流程。

12. 不要在循环中使用Try/Catch语句,若需要,应该放在最外层。
13. 若一个类实现了Cloneable,调用clone()方法创建类的实例。因为用new创建时,构造函数链中的所有构造函数都会被自动调用。

14. 乘法和除法
复制代码

考虑下面的代码:

for (val = 0; val < 100000; val +=5) { 

alterX = val * 8; myResult = val * 2; 

}

用移位操作替代乘法操作可以极大地提高性能。下面是修改后的代 码:

for (val = 0; val < 100000; val += 5) { 

alterX = val << 3; myResult = val << 1; 

}

复制代码

  修改后的代码不再做乘以8的操作,而是改用等价的左移3位操作,每左移1位相当于乘以2。相应地,右移1位操作相当于除以2。值得一提的是,虽然移位操作速度快,但可能使代码比较难于理解,所以最好加上一些注释。

15. 尽量使用HashMap和ArrayList;除非必要,否则不推荐使用HashTable和Vector,后者由于同步机制导致了性能的开销。
16. 知道长度的情况下尽量使用定长数组array。
17. 当复制大量数据时,使用System.arraycopy()命令。

你可能感兴趣的:(java优化)