java 性能优化

一。为优化速度,for循环参数中,尽量不要使用计算式。


for(int i = 0; i < uriData.size(); i++)
应该写成:
int num = uriData.size();
for(int i = 0; i < num; i++)

二。避免把try/catch块放入循环体内

把try/catch块放入循环体内,会极大的影响性能,如果编译JIT被关闭或者你所使用的是一个不带JIT的JVM,性能会下降21%之多!

三。对于boolean值,避免不必要的等式判断

这么做1)代码执行的更快(生成的字节码少了5个字节); 2)代码会更干净。

四。不要在循环体内实例化变量

在循环体中实例化临时变量会增加内存消耗。

例:

for(int i=0; i < num; i++){

    Object o = new Object();

    o = v.elementAt(i);

    .....

}

改成

Object o;

for(int i=0; i < num; i++){
    o = v.elementAt(i);

    ....

}

五。尽量不要使用取反操作符

取反操作符(!)降低程序的可读性。

六。使用条件操作符

例:

if(A){

    return B;

}else{

    return C;

}

写成 return(A ? B : C);

 

if(A){

    a = B;

}else{

    a = c;

}

写成 a = (A ? B : C);

七。在finally块中关闭Stream

程序中使用到的资源应当被释放,以避免资源泄漏。

八。复制数组,使用System.arraycopy()

System.arraycopy()要比通过循环来复制数组快的多

九。让访问实例内变量的getter/setter方法变成final

简单的getter/setter方法应该被置成final,这会告诉编译器,这个方法不会被重裁,所以,可以变成'inlined'

例:

class MAF{
    public void setSize(int size){
        _size = size;

    }

    private int _size;

}

改成

class DAF {

    final public void setSize(int size){
        _size = size;

    }

    private int _size;

}

十。避免不需要的instanceof操作

如果左边的对象的静态类型等于右边的,instanceof表达式返回永远为true。

十一。使用移位操作符来代替‘a/b’,‘a*b’操作

“/”是一个很昂贵的操作,使用移位操作将会更快更有效。

a/4   ==> a >> 2

a/8  ==> a >> 3

a/3 不能替换

a*4 ==> a << 2

a *8 ==> a << 3

a*3 不能替换

十二。如果字符串只有一个字符,在字符串相加的时候,使用‘’代替”“

例:

string = ”abc“ +‘d';

十三。用"StringTokenizer"代替’indexOf()‘和'substring()'

使用indexOf()和substring()来分析字符串,容易导致StringIndexOutOfBoundsException。

十四。尽可能的使用栈变量

如果一个变量需要经常访问,那么就需要考虑这个变量的作用域了。

访问静态变量和实例变量将会比访问局部变量多耗费2-3个时钟周期。

例:

private int _sum;

private static int _staticSum;

 

void getSum(int[] values){

    for(int i = 0; i < num; i++){

        _sum += value[i];

       _staticSum += value[i];

   }

}

改成:

void getSum(int[] values){

    int sum = _sum;

    for(int i = 0; i < num; i++){

       sum += value[i];

    }

    _sum = sum;

}

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