Java程序性能优化(一)

来源:互联网 发布:编程类似游戏 编辑:程序博客网 时间:2024/06/16 08:09

======================================================
注:本文源代码点此下载
======================================================

二十、确定 stringbuffer的容量

stringbuffer的构造器会创建一个默认大小(通常是16)的字符数组。在使用中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,并将原先的数组复制过来,再丢弃旧的数组。在大多数情况下,你可以在创建stringbuffer的时候指定大小,这样就避免了在容量不够的时候自动增长,以提高性能。

例子:

1 public class rsbc {

2void method () {

3stringbuffer buffer = new stringbuffer(); // violation

4buffer.append ("hello");

5}

6 }

更正:

为stringbuffer提供初始大小。

1 public class rsbc {

2void method () {

3stringbuffer buffer = new stringbuffer(max);

4buffer.append ("hello");

5}

6private final int max = 100;

7 }

二十一、尽可能的使用栈变量

如果一个变量需要经常访问,那么你就需要考虑这个变量的作用域了。static? local?还是实例变量?访问静态变量和实例变量将会比访问局部变量多耗费2-3个时钟周期。

例子:

1 public class usv {

2void getsum (int[] values) {

3for (int i=0; i4_sum += value[i];// violation.

5}

6}

7void getsum2 (int[] values) {

8for (int i=0; i9_staticsum += value[i];

10}

11}

12private int _sum;

13private static int _staticsum;

14 }

更正:

如果可能,请使用局部变量作为你经常访问的变量。

你可以按下面的方法来修改getsum()方法:

1 void getsum (int[] values) {

2int sum = _sum;// temporary local variable.

3for (int i=0; i 4sum += value[i];

5}

6_sum = sum;

7 }

二十二、不要总是使用取反操作符(!)

取反操作符(!)降低程序的可读性,所以不要总是使用。

例子:

1 public class dun {

2boolean method (boolean a, boolean b) {

3if (!a)

4return !a;

5else

6return !b;

7}

8 }

更正:

如果可能不要使用取反操作符(!)

二十三、与一个接口 进行instanceof操作

基于接口的设计通常是件好事,因为它允许有不同的实现,而又保持灵活。只要可能,对一个对象进行instanceof操作,以判断它是否某一接口要比是否某一个类要快。

例子:

1 public class insof {

2private void method (object o) {

3if (o instanceof interfacebase) { }// better

4if (o instanceof classbase) { }// worse.

5}

6 }

7

8 class classbase {}

9 interface interfacebase {}


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
原创粉丝点击