前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java改善性能小技巧

Java改善性能小技巧

作者头像
三哥
发布2020-01-17 10:48:49
3700
发布2020-01-17 10:48:49
举报
文章被收录于专栏:java工会java工会

改善性能的技巧

◆ ◆ ◆ ◆

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

慎用异常

◆ ◆ ◆ ◆

在开发中,经常使用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 -

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java工会 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档