一、在合适的场合使用单例,适用场景如下:
1)控制资源的使用,通过线程同步来控制资源的并发访问;
2)控制实例的产生,以达到节约资源的目的;
3)控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。
二、避免随意使用静态变量
当某个对象被定义为static变量所引用,那么GC通常是不会回收这个对象所占有的内存。
三、避免过多过常地创建Java对象
尽量避免在经常调用的方法,循环中new对象,由于系统不仅要花费时间来创建对象,而且还要花时间对这些对象进行垃圾回收和处理,在我们可以控制的范围内,最大限度地重用对象,最好能用基本的数据类型或数组来替代对象。
四、使用局部变量
调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快;其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。
五、处理好包装类型和基本类型两者的使用场所
虽然包装类型和基本类型在使用过程中是可以相互转换,但它们两者所产生的内存区域是完全不同的,基本类型数据产生和处理都在栈中处理,包装类型是对象,是在堆中产生实例。在集合类对象,有对象方面需要的处理适用包装类型,其他的处理提倡使用基本类型。
六、使用基本数据类型代替对象
七、合理的创建HashMap
八、减少对变量的重复计算
for(int i=0;i<list.size();i++)
应改为
for(int i=0,len=list.size();i<len;i++)
九、尽量使用懒加载策略,即在需要的时候才创建
十、在finally块中释放资源
十一、使用移位来代替'a/b'的操作
十二、确定StringBuffer的容量
StringBuffer 的构造器会创建一个默认大小(通常是16)的字符数组。在使用中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,并将原先的数组复制过来,再丢弃旧的数组。在大多数情况下,你可以在创建 StringBuffer的时候指定大小,这样就避免了在容量不够的时候自动增长,以提高性能。
十三、避免使用二维数组
二维数据占用的内存空间比一维数组多得多,大概10倍以上。
十四、避免使用split
除非是必须的,否则应该避免使用split,split由于支持正则表达式,所以效率比较低,如果是频繁的几十,几百万的调用将会耗费大量资源,如果确实需要频繁的调用split,可以考虑使用apache的StringUtils.split(string,char),频繁split的可以缓存结果。
十五、ArrayList & LinkedList
一个是线性表,一个是链表,一句话,随机查询尽量使用ArrayList,ArrayList优于LinkedList,LinkedList还要移动指针,添加删除的操作LinkedList优于ArrayList,ArrayList还要移动数据。
十六、使用System.arraycopy ()代替通过来循环复制数组
十七、缓存经常使用的对象
尽可能将经常使用的对象进行缓存,可以使用数组,或HashMap的容器来进行缓存,但这种方式可能导致系统占用过多的缓存,性能下降,推荐可以使用一些第三方的开源工具,如EhCache,Oscache进行缓存,他们基本都实现了FIFO/FLU等缓存算法。
十八、避免非常大的内存分配
十九、慎用异常
二十、重用对象
二十一、不要重复初始化变量
二十二、及时关闭IO
二十三、不要在循环中使用Try/Catch语句,应把Try/Catch放在循环最外层
二十四、array(数组)和ArrayList的使用
array 数组效率最高,但容量固定,无法动态改变,ArrayList容量可以动态增长,但牺牲了效率。
二十五、单线程使用 HashMap, ArrayList
除非必要,否则不推荐使用HashTable,Vector,它们使用了同步机制,而降低了性能。
二十六、StringBuffer,StringBuilder的区别
java.lang.StringBuffer 线程安全的可变字符序列。一个类似于String的字符串缓冲区,但不能修改。StringBuilder与该类相比,通常应该优先使用StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。为了获得更好的性能,在构造StringBuffer或StringBuilder时应尽量指定她的容量。当然如果不超过16个字符时就不用了。相同情况下,使用StringBuilder比使用StringBuffer仅能获得10%~15%的性能提升,但却要冒多线程不安全的风险。综合考虑还是建议使用StringBuffer。
二十七、复制大量数据时,使用System.arraycopy
二十八、循环内不要不断创建对象引用
二十九、及时清除不再需要的会话
三十、不要对数组使用toString方法
网友评论