我总结的几个容易被忽略的java性能优化方式

字体大小: 中小 标准 ->行高大小: 标准
(1)减少对象生命周期
对象生命周期=销毁时间-创建时间
实际上减少对象生命周期有2个途径:尽早地销毁对象和尽量晚地创建对象
大多数人都只注意尽早地销毁对象,但是却很少人注意尽量晚地创建对象。特别是耗费内存比较大的对象应该尽量晚地被创建。只有真正需要的时候才开始创建它.除了对象以外,比如连接数据库。只有所有准备就绪的时候,才再连接数据库,使用完成数据库连接就立刻关闭。最短时间使用连接,包括数据流也一样
(2)线程启动得越早越好
当准备线程的工作都已经好了以后,创建线程,就要马上启动线程,线程启动得越早越能提前获取数据
(3)用字符代替单字符串
StringBuilder str=new StringBuilder();
那么str.append("m")不如str.append('m')快
(4)StringBuilder可以连续增加
StringBuilder的append方法返回自身可以继续增加,无需重新获取StringBuilder对象

StringBuilder str=new StringBuilder();
str.append("abc");
str.append("ddd");

可以写成

StringBuilder str=new StringBuilder();
str.append("abc").append("ddd");

(5)无顺序遍历数组
其实有的时候遍历数组无关顺序,只需要把数组对象都遍历一遍即可
通常写法是

int[] a=new int[10000];
for(int i=0,len=a.length;i<len;i++){
    int b=a[i];
          //然后处理
}

其实我在无关顺序遍历数组的时候我这么写:

int[] a=new int[10000];
for(int i=-1,len=a.length;++i<len;){
    int b=a[i];
           //然后处理
}
有的时候这么写

int[] a=new int[10000];
for(int i=a.length;i>0;){
    int b=a[--i];
           //然后处理
}

充分利用++i或者--i.最后一个不用计算len,直接--i可以取值,比较的时候与常数0比较

(6)不要有多余的操作

String a=getA(),b=getB();
if(a!=null&&b!=null){
}

最好为

String a=getA();
if(a!=null){
     String b=getB();//这样a为null,就不需要获取b了。
     if(b!=null){
     }
}

还有像

if(getValue()!=2&&getValue()!=0){
...
}

直接写为

int value=getValue();
if(value!=2&&value!=0){
...
}
要调用方法浪费性能,其次是访问对象属性,最快是局部变量,利用下标访问数组系统还要判断越界问题也浪费性能.
(7)还有一些数组复制用'system.arraycopy (),还有使用局部变量要比使用全局变量快。大家可以看不变性的String类源代码就知道了
(8)关于锁java有读写锁还有尝试获取锁的功能,可以参看ReadWriteLock类

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/68027.html