(1)减少对象生命周期
对象生命周期=销毁时间-创建时间
实际上减少对象生命周期有2个途径:尽早地销毁对象和尽量晚地创建对象
大多数人都只注意尽早地销毁对象,但是却很少人注意尽量晚地创建对象。特别是耗费内存比较大的对象应该尽量晚地被创建。只有真正需要的时候才开始创建它.除了对象以外,比如连接数据库。只有所有准备就绪的时候,才再连接数据库,使用完成数据库连接就立刻关闭。最短时间使用连接,包括数据流也一样
(2)线程启动得越早越好
当准备线程的工作都已经好了以后,创建线程,就要马上启动线程,线程启动得越早越能提前获取数据
(3)用字符代替单字符串
StringBuilder str=new StringBuilder();
那么str.append("m")不如str.append('m')快
(4)StringBuilder可以连续增加
StringBuilder的append方法返回自身可以继续增加,无需重新获取StringBuilder对象
可以写成
(5)无顺序遍历数组
其实有的时候遍历数组无关顺序,只需要把数组对象都遍历一遍即可
通常写法是
其实我在无关顺序遍历数组的时候我这么写:
有的时候这么写
充分利用++i或者--i.最后一个不用计算len,直接--i可以取值,比较的时候与常数0比较
(6)不要有多余的操作
最好为
还有像
直接写为
要调用方法浪费性能,其次是访问对象属性,最快是局部变量,利用下标访问数组系统还要判断越界问题也浪费性能.
(7)还有一些数组复制用'system.arraycopy (),还有使用局部变量要比使用全局变量快。大家可以看不变性的String类源代码就知道了
(8)关于锁java有读写锁还有尝试获取锁的功能,可以参看ReadWriteLock类
对象生命周期=销毁时间-创建时间
实际上减少对象生命周期有2个途径:尽早地销毁对象和尽量晚地创建对象
大多数人都只注意尽早地销毁对象,但是却很少人注意尽量晚地创建对象。特别是耗费内存比较大的对象应该尽量晚地被创建。只有真正需要的时候才开始创建它.除了对象以外,比如连接数据库。只有所有准备就绪的时候,才再连接数据库,使用完成数据库连接就立刻关闭。最短时间使用连接,包括数据流也一样
(2)线程启动得越早越好
当准备线程的工作都已经好了以后,创建线程,就要马上启动线程,线程启动得越早越能提前获取数据
(3)用字符代替单字符串
StringBuilder str=new StringBuilder();
那么str.append("m")不如str.append('m')快
(4)StringBuilder可以连续增加
StringBuilder的append方法返回自身可以继续增加,无需重新获取StringBuilder对象
1
2
3
4
|
StringBuilder str=
new
StringBuilder();
str.append(
"abc"
);
str.append(
"ddd"
);
|
可以写成
1
2
3
|
StringBuilder str=
new
StringBuilder();
str.append(
"abc"
).append(
"ddd"
);
|
(5)无顺序遍历数组
其实有的时候遍历数组无关顺序,只需要把数组对象都遍历一遍即可
通常写法是
1
2
3
4
5
6
|
int
[] a=
new
int
[
10000
];
for
(
int
i=
0
,len=a.length;i<len;i++){
int
b=a[i];
//然后处理
}
|
其实我在无关顺序遍历数组的时候我这么写:
1
2
3
4
5
6
|
int
[] a=
new
int
[
10000
];
for
(
int
i=-
1
,len=a.length;++i<len;){
int
b=a[i];
//然后处理
}
|
1
2
3
4
5
6
|
int
[] a=
new
int
[
10000
];
for
(
int
i=a.length;i>
0
;){
int
b=a[--i];
//然后处理
}
|
充分利用++i或者--i.最后一个不用计算len,直接--i可以取值,比较的时候与常数0比较
(6)不要有多余的操作
1
2
3
4
|
String a=getA(),b=getB();
if
(a!=
null
&&b!=
null
){
}
|
最好为
1
2
3
4
5
6
7
|
String a=getA();
if
(a!=
null
){
String b=getB();
//这样a为null,就不需要获取b了。
if
(b!=
null
){
}
}
|
还有像
1
2
3
4
|
if
(getValue()!=
2
&&getValue()!=
0
){
...
}
|
直接写为
1
2
3
4
5
|
int
value=getValue();
if
(value!=
2
&&value!=
0
){
...
}
|
(7)还有一些数组复制用'system.arraycopy (),还有使用局部变量要比使用全局变量快。大家可以看不变性的String类源代码就知道了
(8)关于锁java有读写锁还有尝试获取锁的功能,可以参看ReadWriteLock类