1、嵌套循环linux应该遵循“外小内大”的原则,windows应该遵循“外大内小”的原则,这就好比你复制很多个小文件和复制几个大文件的区别,这可能和不同平台或不同版本的软硬件都有关系。
2、提取与循环无关的表达式
3、尽量减少对变量的重复计算
4、捕获异常
5、尽量指定类、方法的final修饰符
带有final修饰符的类是不可派生的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大
6、尽量采用懒加载的策略,即在需要的时候才创建
7、循环内不要不断创建对象引用
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这块资源就不会回收了,一直占用着消耗内存
// 外大内小
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这块资源就不会回收了,一直占用着消耗内存