您的位置:首页 > 编程语言 > Java开发

提高java代码性能总结

2013-05-14 10:24 281 查看
最近查了一些提高java代码性能的资料,总结一下几点供大家参考:

 

1、尽量指定类的final修饰符。带有final修饰符的类是不可派生的。如果一个类为final,则该类所有的方法都是final。java编译器会寻找机会内联所有的final方法。能使性能提亮50%。

2、尽量重用对象。特别是String对象的使用是,出现字符串连接情况时应用StringBuffer代替,由于系统不仅要花时间生成对象,以后可能还需花时间对这些对象进行垃圾回收和处理。

3、尽量使用局部变量。调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中速度较快。试验证明创建局部变量的速度是创建成员变量速度的4倍。

4、不要重复初始化变量。默认情况下,调用类的构造 函数时,java会把变量初始化为确定的值,当一个类从另一个类派生时,这一点尤其应该注意,因为用new关键词创建一个对象时,构造函数链中的所有构造函数者会被自动调用,所以链式集成可能会减少代码冗余提高开发效率但会降低代码执行速度。

5、在java+oracle的应用系统开发中,java中内嵌的SQL语句尽量使用大写的形式,以减轻oracle解析器的解析负担。

6、java编程过程中,进行数据库连接,IO操作时务必小心,在使用完毕后,及时关闭以释放资源。因为对这些大对象的操作会造成系统大的开销,稍有不慎,会导致严重的后果。

7、由于JVM的GC机制不十分机智,所以对象使用完毕后,手动设置成null

8、在使用同步机制时,应尽量使用方法用步代替代码块同步。

9、尽量减少对变量的重复计算,如:

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

应替换为:

for(int i=0,int len=list.size();i<len;i++),试验证明调用方法消耗时间是直接使用变量消耗时间的5倍。

10、尽量采用lazy loading的策略,在需要的时候才开始创建,如:

String str="ee";

if(i==0){

list.add(str);

}

应替换为:

if(i==0){

String str="ee";

list.add(str);

}

懒加载可以尽量减少创建对象的数量,节省系统开销,如Hibernate,spring等框架都使用了懒加载策略。

11、慎用异常,异常对性能不利。不要在循环中使用try/catch语句,应把其放置在最外层。

12、使用StringBuffer时,调用new StringBuffer(int len)给它一个合理的初使化容量,也可以使用ensureCapacity(int ss)方法在创建之后设置容量。因为它内维护一个字符数组,当你用缺省的构造时初使长度为16,当达到最大容量时它将自身容量增加到当前的2倍再加2。它不得不创建一个新数组,并完成复制。所以应给它一个合理的容量。这一点很重要,一般认为用StringBuffer代替String可以提高字符串连接操作的性能,但如果没有给出合理的StringBuffer长度,效果并不会太理想。

13、合理使用Vector。它就是一个Object数组。进量不要往前加入数据,如:vector.add(0,obj);用vector.add(obj)代替,它初始能力是10个,能力不足时每次加倍。和StringBuffer类似,每次能力扩展要完成元素复制。删除数据时用vector.remove(vector.size()-1);代替vector.remove(0),这个可以从数据结构上解释:数组是一块连续空间在添加和删除时要进性数据移动,所以在使用集合时要考虑集合的数据结构。删除所有元素用removeAllElements方法。

14、复制大量数据时用System.arraycopy(),尽量使用java提供的api,因为java提供的方法是经过性能优化的。

15、不用new关键字创建对象。用new 创建对象是构造器链中的所有构造器都会被掉用。但如果一个对象实现了Cloneable接口,我们可以调用它的clone方法。clone方法不会调用任何类构造函数。多重继承时效果特别明显,因为实例化子类是会依次调用所有父类的构造。

16、乘法和除法考虑用移位带替,如8*2可以用8<<1;3*4可以用3<<2。

17、遍历HashMap:

for(Entry<?,?> entry:map.entrySet()){

entry.getKey();

entry.getValue();

}

通过以上总结可以看出,修改几句代码就有可能提供整个程序的性能,所以要把以上建议应用到实际编程中,养成书写高性能代码的习惯。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: