java性能优化

1、嵌套循环linux应该遵循“外小内大”的原则,windows应该遵循“外大内小”的原则,这就好比你复制很多个小文件和复制几个大文件的区别,这可能和不同平台或不同版本的软硬件都有关系。
//	外大内小
for (int i = 0; i < 10000000; i++) {
	for (int j = 0; j < 10; j++) {


	}
}
		


//	外小内大
for (int i = 0; i <10 ; i++) {
	for (int j = 0; j < 10000000; j++) {


	}
}

2、提取与循环无关的表达式
int c = a*b;  
for (int i = 0; i < 10000000; i++) {  
    i=i*c;  //error		i=i*a*b;  
} 

3、尽量减少对变量的重复计算
for (int i = 0, int length = list.size(); i < length; i++){ 
	//	error		for (int i = 0; i < list.size(); i++)
}

4、捕获异常
//	correct 不要在循环中使用try…catch…,应该把其放在最外层
try {  
    for (int i = 0; i < 10000000; i++) {  
    }  
} catch (Exception e) {  
  
} 


//	error
for (int i = 0; i < 10000000; i++) {  
    try {  
    } catch (Exception e) {  
    }  
}

5、尽量指定类、方法的final修饰符
带有final修饰符的类是不可派生的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大



6、尽量采用懒加载的策略,即在需要的时候才创建
if(flag){
	String a="aaa";		//	error	在判断前创建变量
}

7、循环内不要不断创建对象引用
for (int i = 1; i <= count; i++){
	obj = new Object();		//	error		Object obj = new Object(); 
}

8、将常量声明为static final,并以大写命名
这样在编译期间就可以把这些内容放入常量池中,避免运行期间计算生成常量的值。另外,将常量的名字以大写命名也可以方便区分出常量与变量


9、把一个基本数据类型转为字符串,基本数据类型.toString()是最快的方式、String.valueOf(数据)次之、数据+””最慢
     1.String.valueOf()方法底层调用了Integer.toString()方法,但是会在调用前做空判断
     2.Integer.toString()方法就不说了,直接调用了
     3.i + “”底层使用了StringBuilder实现,先用append方法拼接,再用toString()方法获取字符串
 
 
10、对资源的close()建议分开操作
XXX.close()抛异常了,那么就进入了cath块中了,YYY.close()不会执行,YYY这块资源就不会回收了,一直占用着消耗内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值