======================================================
注:本文源代码点此下载
======================================================
二十、确定 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^)/
本文提供了几个Java性能优化的实用建议,包括合理设置StringBuffer的初始容量以减少内存分配开销,优先使用局部变量以提高访问速度,避免频繁使用取反操作符(!)以增强代码可读性,以及在类型检查时优选接口而非具体类以提升运行效率。

被折叠的 条评论
为什么被折叠?



