java程序性能优化

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;但是如果对象较大,占用较多内存,不用的时候就应手动置为空了



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。