常见性能优化的手段?

难度指数: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()可以生成对象的拷贝。

三.总结

编码习惯、有没有对于之前的经验总结,技术梳理。