1. 尽量避免随意使用静态变量
当某个对象被定义为static的变量引用时,那么GC通常是不会回收这个对象所占用的内存
public class A {
static B b = new B(); // 静态变量b的生命周期与A类同步, 只要A类不被卸载,那么b对象就会常驻内存,直到程序终止
}
2. 处理好包装类型和基本类型的使用场所
虽然包装类型和基本类型在使用过程中是可以相互转换,但它们两者所产生的内存区域是完全不同的,基本类型数据产生和处理在栈中;
包装类型是对象,在堆中产生实例。
3. 慎用synchronized
实现同步是要很大的系统开销为代价,甚至可能造成死锁,所以尽量避免无谓的同步控制。
4. 单线程尽量使用HashMap、ArrayList
HashTable、Vector等使用了同步机制,降低了性能。
5. 尽量减少对变量的重复计算
for(int i = 0; i < list.size(); i++) // 循环中,循环条件会被反复计算
应该改为 for(int i = 0, len = list.size(); i < len; i++)
6. 尽量避免不必要的创建
A a = new A();
if(i == 1){ list.add(a); }
应该改为: if(i == 1){ A a = new A(); list.add(a); }
7. 尽量确定StringBuilder的容量
StringBuilder的构造器会创建一个默认大小(通常是16)的字符数组,在使用中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,并将原先的数组复制过来,再丢弃旧的数组。在大多数情况下,你可以在创建StringBuilder的时候指定大小,这样就避免了在容量不够的时候自动增长,以提高性能。
8. 尽量早释放无用对象的引用
大部分时间,方法局部引用变量所引用的对象会随着方法结束而变成垃圾,因此,大部分时候程序无需将局部引用变量显示地设为null;但是如果对象较大,占用较多内存,不用的时候就应手动置为空了
原文:http://blog.csdn.net/zdp072/article/details/45132821