Java改善性能小技巧

2020-01-17 10:48:49 浏览数 (1)

改善性能的技巧

◆ ◆ ◆ ◆

不管有多少经验,都会被问到一些优化建议,从代码层面到数据库层面,下面介绍一些改善性能的小技巧

慎用异常

◆ ◆ ◆ ◆

在开发中,经常使用try-catch进行错误捕获,但是try-catch对系统性能是很糟糕的。一定要注意:

  1. 在循环语句中,尽量不要使用try-catch
  2. 如果无法处理某个异常,不要捕获它
  3. 在最靠近异常抛出的地方捕获异常,不要大段代码的捕获。
  4. 捕获有特殊意义的异常,如SqlException,而不是简单的Exception

使用局部变量

◆ ◆ ◆ ◆

调用方法时传递参数以及在调用中创建的临时变量都保存在栈中,速度较快。其他变量,如静态变量,在堆中,速度较慢;

如:

int a=0

for(int 1=0;i<100000000;i )

a ;

public static int ta = 0;

for(int 1=0;i<100000000;i )

ta ;

在测试时,代码1的速度是68ms,第二段是256ms,远远大于代码1

位运算代替乘除法

◆ ◆ ◆ ◆

计算机中,位运算是最高效的,可以 尝试使用位运算来代替乘除法,

long a =100;

for(int 1=0;i<100000000;i ){

a*=2;

a/=2;

}

改成

long a =100;

for(int 1=0;i<100000000;i ){

a<<=1;//乘以2

a>>=1;//除以2

}

替换switch

◆ ◆ ◆ ◆

switch语句用于多条件判断,类似于if-else。

int re=0;

for(int 1=0;i<100000000;i ){

re=swtichInt(i);

}

int switchInt(int z){

int i=z%3 1;

switch(i){

case 1:return 3;

case 2:return 5;

case 3:return 7;

default:return -1;

}

}

改为

int re=0;

int [] sw = new int{3,5,7};

for(int 1=0;i<100000000;i ){

re=arrayInt(sw,i);

}

int arrayInt(int [] sw,int z){

int i=z%3 1;

if(i<1||i>3) return -1;

else return sw[i];

}

数组的随机访问非常快,使用连续的数组代替switch语句,能够明显提高速度

提取表达式

◆ ◆ ◆ ◆

避免让代码做重复运算

如:

double d=Math.random();

double a=Math.random();

double b=Math.random();

double e=Math.random();

double x,y;

for(int 1=0;i<100000000;i ){

x=d*a*b/3*4*a;

y=e*a*b/3*4*a;

}

其中,两个运算的后半部分是相同的,意味着相同的表达式被重复计算了,可改进为:

for(int 1=0;i<100000000;i ){

t=a*b/3*4*a;

x=d*t;

y=e*t;

}

展开循环

◆ ◆ ◆ ◆

这个不是必要的,因为会影响代码的可读性,但是如果是需要提高性能的话,可以尝试考虑。

int [] array = new int [100000000];

for(int 1=0;i<100000000;i ){

array[i]=i;

}

更改为

for(int 1=0;i<100000000;i =3){

array[i]=i;

array[i 1]=i 1;

array[i 2]=i 2;

}

实际测试的时候,第一段的时间为101ms,第二段的时间为34ms

使用arrayCopy()

◆ ◆ ◆ ◆

System.arraycopy()是native函数,性能优于普通函数,遇到数组复制时,尽量使用它

如:

System.arraycopy(array,0,array2,0,size)

静态方法代替实例方法

◆ ◆ ◆ ◆

使用static关键字描述的方法为静态方法。在java中,实例方法需要维护一张表以视线对多态的支持,在调用时需要更多资源。所以对于一些常用的工具类方法,没有对其重载的必要时,就声明为static,加速调用。调用静态方法时,也不需要生成类的实例,调用也方便一些。

- end -

祝各位人人都能涨20K!

每个人都是技术大牛!

点击关注,不要走开哟~

- TEN END -

0 人点赞