刚在网上看到一篇关于Java性能调优的帖子,很是帮助,自己也用了十多年JAVA了,有些感同身受,这里 引用那帖子结合自己的感受来谈下
技巧1:尽量少用new来创建对象
因为用new来创建对象的实例时 ,构造函数链上的所有构造函数都会被依次调用,导致效率很低。其实我们可以用一些小技巧,比如复用已有 对象。比如说,一个类如果实现了Cloneable接口的话,可以调用这个类的对象的clone()方法来创建一个新 对象,这样的对象不会调用任何类的构造函数。所以,这样生成新对象的速度比调用任何类的构造函数要来的 快。
技巧2:尽量使用局部变量
如果学会JAVA虚拟机原理的话都知道,在调用方法的时候,传 递的参数以及调用的时候创建的临时变量都是保存在栈(stack)上的,这种变量的创建速度快。而静态变量 ,实例变量,都是创建在堆(heap)上的,这种变量的创建速度慢。
技巧3:尽量减少方法调用
面向对象提成尽量用方法调用来间接的访问变量,而不是希望直接访问变量,但是方法调用会有压栈退栈等操 作,从而会影响方法效率。比如说用setter和getter来访问变量比直接访问变量的效率就低很多,但是往往用 方法来访问变量更加有可读性,所以我们应该在可读性和效率之间进行权衡
技巧4:尽量使用 static,final,private
因为如果类级别被修饰为final,那么这个类是不可被继承的,类中的所有方法 也不可以被继承的。那么编译器会进行优化,将其方法进行内联,来提高效率。在方法级,如果某个方法被修 饰为static,final,private,则是不可以被覆盖,所以JAVA无需要动态关联,从而提高了效率
技巧5: 让setter/getter也成为final
同样,这样做的目的就是让编译器知道这个方法是不可以被覆盖,从而 将其转为inline来提高效率。
技巧6:不要不必要的类转型
比如A是B的父类,那么从B到A就不 用转型了。
技巧7:尽量重用String对象
比如对于字符串进行连接,操作时候,可以用 StringBuffer/StringBuilder来代替String ,因为String对象连接,操作会产生大量的新String对象,而系 统不仅要花费时间生成这些对象,还要最后对这些新生成的对象进行垃圾回收和清理。
技巧8:别过分 创建