java优化-java代码性能优化学习总结

每一处小小的优化,累积起来就是性能的一次大跃进;
相反,每一处代码的粗心,累积起来可能就是维护的灾难;

java中有哪些值得优化,或者注意的地方呢?

1.使用’system.arraycopy ()'代替通过来循环复制数组
‘system.arraycopy ()’ 要比通过循环来复制数组快的多

2.使用移位操作(位运算符)代替乘法和除法(为2的幂次方的时候)
移位操作符具有极高的效率

3.使用synchronized时尽量用同步块,少用同步方法
synchronized关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁)。除非能确定一整个方法都是需要进行同步的,否则尽量使用同步代码块,避免对那些不需要进行同步的代码也进行了同步,影响了代码执行效率。

4.对于常量字符串,用’string’ 代替 'stringbuffer’
把stringbuffer换成string,如果确定这个string不会再变的话,这将会减少运行开销提高性能。

5.如果能估计到待添加的内容长度,为底层以数组方式实现的集合、工具类指定初始长度;
比如ArrayList、LinkedLlist、StringBuilder、StringBuffer、HashMap、HashSet等等。
例如:stringbuffer的构造器会创建一个默认大小(通常是16)的字符数组。在使用中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,并将原先的数组复制过来,再丢弃旧的数组。在大多数情况下,你可以在创建stringbuffer的时候指定大小,这样就避免了在容量不够的时候自动增长,以提高性能。

6.尽量指定类、方法的final修饰符
带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50%。

7.字符串拼接时使用StringBuffer
需要注意对String对象的使用,只要不是同一字符串,使用String后都会在常量池中创建,这样很耗费资源。因此出现字符串连接时应该使用StringBuilder/StringBuffer代替

8.尽可能使用局部变量
调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中速度较快,其他变量,如静态变量、实例变量等,都在堆中创建,速度较慢。另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。

9.使用数据库连接池和线程池
这两个池都是用于重用对象的,前者可以避免频繁地打开和关闭连接,后者可以避免频繁地创建和销毁线程

10.把一个基本数据类型转为字符串使用.toString()的方式
基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+””最慢

11.对资源的close()建议分开操作
例如:

try{
XXX.close();
YYY.close();
}catch (Exception e)
{
...
}

可以改成:

try{ XXX.close(); }catch (Exception e) { ... }try{ YYY.close(); }catch (Exception e) { ... }

这样虽然有些麻烦,却能避免资源泄露。我们想,如果没有修改过的代码,万一XXX.close()抛异常了,那么就进入了cath块中了,YYY.close()不会执行,YYY这块资源就不会回收了,一直占用着,这样的代码一多,是可能引起资源句柄泄露的。而改为下面的写法之后,就保证了无论如何XXX和YYY都会被close掉。

觉得不错的小伙伴可以右上角点个赞或关注哟!

你可能感兴趣的:(java知识)