常见性能优化的手段?
难度指数:3星级 考察频率:40%
一.编码习惯
列举一下;
性能优化:
1.1 CPU的优化:时间片
1.2 内存优化 :内存
1.3 磁盘优化 :IO读写
二.回答
2.1 慎用异常
int a=0;
for(int i=0;i<10000000000;i++){
try{
a++; //有可能出现异常
}cath(Exception e){
}
}
比较下
int a=0;
try{
for(int i=0;i<10000000000;i++){
a++; //有可能出现异常
}
}cath(Exception e){
}
2.2 使用局部变量
public static int ta=0;
for(int i=0;i<1000000000;i++){
ta++; //频繁的调用static变量,堆区,读取速度,没栈区快
}
public int ta=0; //局部变量 ,栈区
for(int i=0;i<1000000000;i++){
ta++; //频繁的调用static变量,堆区,读取速度,没栈区快
}
2.3 位运算替换乘除法
long a=1000;
for(int i=0;i<10000000;i++){
a*=2; //a/=2;
}
提升效率,位运算,cpu级别
long a=1000;
for(int i=0;i<10000000;i++){
a<<=1; //a>>=1;
}
2.4 替换switch
switch 比if效率提升了很多,还可以继续提升效率。
int re=0;
for(int i=0;i<10000000;i++){
re=switchMethod(); //switch方法
}
int switchMethod(int z){ //根据操作数的不同,返回不同的值
int i=z%10+1;
switch(i){
case 1:return 3;
case 2:return 6;
case 3:return 7;
case 4:return 14;
default:return -1;
}
}
优化switch代码,一般和数组联系起来;
int re=0;
int[]sw=new int[]{0,3,6,7,14};
for(int i=0;i<10000000;i++){
re=switchMethod(sw,i); //switch方法
}
//定义一个方法
int arrayInt(int[]sw,int z){
int i=z%10+1;
if(i>4||i<1)
return -1;
else
return sw[i];
}
2.5 一维数组代替二维数组
2.6 尽量使用公式优先
1到100的和,for循环;
高斯公式 n*(n-1)/2
2.7 数组操作
arrayCopy()效率比较高,不要使用for循环一个一个来操作数据
2.8 IO提升效率
优先使用Buffer进行IO操作,缓冲IO
2.9 对于对象的操作
一般使用的是new创建对象,堆开辟空间,赋值等等操作。快速复制一个对象实例,Object.clone()可以生成对象的拷贝。
三.总结
编码习惯、有没有对于之前的经验总结,技术梳理。