1. 不用new关键字创建类的实例
用new关键字创建类的实例时,构造函数会被自动调用。
实现Cloneable接口,就可以调用clone()方法来创建对象,clone()方法不会调用构造函数,可以结合工厂模式一起使用。
2. 慎用异常
避免创建异常,可以抛出异常。
3. 尽量在合适的场合使用单例
4. 尽量避免随意使用静态变量
GC通常是不会回收静态变量所占的内存。
5. 尽量避免频繁的创建对象
应该最大限度的重用对象。
6. 尽量使用final修饰符
带有final修饰符的类是不可派生的,可以显著提高性能。
7. 尽量使用局部变量
局部变量存放在Stack中,速度较快。
静态变量和实例变量存放在Heap中,速度较慢。
8. 尽量处理好包装类型和基本类型两者的使用场所
基本类型数据产生和处理都在Stack中。
包装类型是对象,在Heap中产生实例。
在集合类对象中,有对象方面需要的处理适用包装类型,其他的处理提倡使用基本类型。
9. 慎用synchronized,尽量减小synchronize的方法
实现同步需要很大的系统开销,甚至可能造成死锁,尽量避免无谓的同步控制。
synchronize方法被调用时,当前对象被锁定,当前对象的其它方法无法被其它线程调用。
尽量使用代码块同步代替方法同步。
10.尽量使用StringBuilder和StringBuffer进行字符串连接
11.单线程应尽量使用HashMap、ArrayList
HashTable、Vector等使用了同步机制,降低了性能。
12.尽量合理的创建HashMap
当创建比较大的HashMap时,充分利用构造函数
默认initialCapacity只有16,避免HashMap多次进行hash重构,扩容是一件很耗费性能的事。
13.尽量减少对变量的重复计算
改为
14.尽量避免不必要的创建
15.尽量在finally块中释放资源
程序中使用到的资源应当被释放,以避免资源泄漏。
I/O流,Socket连接,JDBC连接。
16.尽量确定StringBuffer的容量
StringBuffer的构造器会创建一个默认大小16的字符数组。
使用中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,并将原先的数组复制过来,再丢弃旧的数组。
在大多数情况下,你可以在创建StringBuffer的时候指定大小。
17.尽量早释放无用对象的引用
无耗时操作时,不用手动释放
有耗时操作时,应尽早释放
18.尽量避免使用split()
split()由于支持正则表达式,所以效率比较低。
如果是频繁的调用将会耗费大量资源,可以考虑使用Apache的StringUtils.split(),频繁的调用split()的可以缓存结果。
19.尽量缓存经常使用的对象
用new关键字创建类的实例时,构造函数会被自动调用。
实现Cloneable接口,就可以调用clone()方法来创建对象,clone()方法不会调用构造函数,可以结合工厂模式一起使用。
public class FruitFactory {
private static Fruit fruit = new Fruit();
public static Fruit getFruit() {
return fruit.clone();
}
}
2. 慎用异常
避免创建异常,可以抛出异常。
3. 尽量在合适的场合使用单例
4. 尽量避免随意使用静态变量
GC通常是不会回收静态变量所占的内存。
5. 尽量避免频繁的创建对象
应该最大限度的重用对象。
6. 尽量使用final修饰符
带有final修饰符的类是不可派生的,可以显著提高性能。
7. 尽量使用局部变量
局部变量存放在Stack中,速度较快。
静态变量和实例变量存放在Heap中,速度较慢。
8. 尽量处理好包装类型和基本类型两者的使用场所
基本类型数据产生和处理都在Stack中。
包装类型是对象,在Heap中产生实例。
在集合类对象中,有对象方面需要的处理适用包装类型,其他的处理提倡使用基本类型。
9. 慎用synchronized,尽量减小synchronize的方法
实现同步需要很大的系统开销,甚至可能造成死锁,尽量避免无谓的同步控制。
synchronize方法被调用时,当前对象被锁定,当前对象的其它方法无法被其它线程调用。
尽量使用代码块同步代替方法同步。
10.尽量使用StringBuilder和StringBuffer进行字符串连接
11.单线程应尽量使用HashMap、ArrayList
HashTable、Vector等使用了同步机制,降低了性能。
12.尽量合理的创建HashMap
当创建比较大的HashMap时,充分利用构造函数
public HashMap(int initialCapacity, float loadFactor) {
}
默认initialCapacity只有16,避免HashMap多次进行hash重构,扩容是一件很耗费性能的事。
13.尽量减少对变量的重复计算
for (int i = 0; i < list.size(); i++) {
}
改为
int length = list.size();
for (int i = 0; i < length; i++) {
}
14.尽量避免不必要的创建
Object object = null;
if (flag == true) {
object = new Object();
}
15.尽量在finally块中释放资源
程序中使用到的资源应当被释放,以避免资源泄漏。
I/O流,Socket连接,JDBC连接。
16.尽量确定StringBuffer的容量
StringBuffer的构造器会创建一个默认大小16的字符数组。
使用中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,并将原先的数组复制过来,再丢弃旧的数组。
在大多数情况下,你可以在创建StringBuffer的时候指定大小。
17.尽量早释放无用对象的引用
无耗时操作时,不用手动释放
public void operation() {
Object object = new Object();
}
有耗时操作时,应尽早释放
public void operation() {
Object object = new Object();
// 执行操作
object = null; // 尽早释放
// 执行耗时操作
}
18.尽量避免使用split()
split()由于支持正则表达式,所以效率比较低。
如果是频繁的调用将会耗费大量资源,可以考虑使用Apache的StringUtils.split(),频繁的调用split()的可以缓存结果。
19.尽量缓存经常使用的对象