标签:
原文地址:http://user.qzone.qq.com/1159340782/2
略微牺牲一些性能,换来更好的可读性和可维护性是好的选择。以下不提倡和提倡的写法仅供参考。
| 
 不提倡的写法  | 
 原因  | 
|
| 
 1  | 
 尽量避免随意使用静态变量  | 
 静态变量和类同步,类不卸载,对象将常驻内存,直到程序终止  | 
| 
 2  | 
 尽量避免过多过常的创建java对象  | 
 花费时间去创建对象,回收对象也是一种开销,尽量复用对象,用基本数据类型或数组代替对象。  | 
| 
 3  | 
 尽量避免使用finalize方法  | 
 导致GC负担更大,程序效率更差  | 
| 
 4  | 
 尽量避免变量的重复计算  | 
 如遍历数组的长度,一次计算即可  | 
| 
 5  | 
 尽量避免不必要的创建  | 
 程序逻辑控制对象的创建  | 
| 
 6  | 
 尽量避免使用二维数组  | 
 二维数组占用空间比一维数组多得多,大概10倍  | 
| 
 7  | 
 尽量避免使用split  | 
 Split由于支持正则表达式,效率低,消耗大量资源,建议使用apache下的StringUtils.split频繁split缓存结果  | 
| 
 8  | 
 尽量避免非常大的内存分配  | 
 内存连续,浪费资源  | 
| 
 9  | 
 慎用异常  | 
 创建异常开销大,好在try-catch开销不大  | 
| 
 10  | 
 尽量减少IO操作  | 
 IO消耗系统资源,尽量使用缓存  | 
| 
 11  | 
 尽量避免不需要的instanceof操作  | 
 always true  | 
| 
 12  | 
 尽量避免不需要的造型操作  | 
|
| 
 13  | 
 对于boolean避免不必要的等式  | 
 Flag == true  | 
代码中提倡的写法
| 
 序号  | 
 提倡的写法  | 
 原因  | 
| 
 1  | 
 尽量在合适的场合使用单例  | 
 减轻加载的负担,缩短加载的时间,提高加载的效率  | 
| 
 2  | 
 尽量使用final修饰符  | 
 寻找内联所有final方法,性能提高50%  | 
| 
 3  | 
 尽量使用局部变量  | 
 实例变量和静态变量等都在堆中建立,速度慢,局部变量放在栈中,速度快  | 
| 
 4  | 
 处理好包装类型和基本类型使用场景  | 
 包装类型属于对象在堆中创建,基本类型在栈中创建,有对象方面需要处理适用包装类型,其他提倡基本类型  | 
| 
 5  | 
 慎用synchronized尽量减小synchronized方法  | 
 实现同步系统开销大,容易死锁。尽量适用方法同步代替代码块同步  | 
| 
 6  | 
 尽量使用StringBuffer和StringBuilder进行字符串的拼接  | 
 尽量初始化StringBuffer和StringBuilder的长度,字符数组动态添加字符串  | 
| 
 7  | 
 尽量用基本数据类型代替对象  | 
 如String str = “hello” String str = new String(“hello”); 后者还创建了一个字符数组  | 
| 
 8  | 
 单线程尽量使用HashMap ArrayList  | 
 HashTable Vector等使用了同步机制,降低了性能  | 
| 
 9  | 
 尽量合理的使用HashMap  | 
 多使用HashMap的构造方法,初始化它的大小,扩容是一件很耗费性能的事情  | 
| 
 10  | 
 尽量在finally块中释放资源  | 
 避免资源泄漏  | 
| 
 11  | 
 尽量使用位运算取代a/b,a*b操作  | 
 /是一个代价很高的操作  | 
| 
 12  | 
 尽量早释放无用的对象  | 
 Obj =null  | 
| 
 13  | 
 合理使用arrayList和linkedList  | 
 一个是线性表(查询),一个是链表(添加和删除),  | 
| 
 14  | 
 尽量使用System.arraycope复制数组  | 
 比循环复制数组要快得多  | 
| 
 15  | 
 尽量缓存经常使用的对象  | 
 HashMap,WeekHashMap或者第三方的工具EhCache OsCache Memcached  | 
| 
 16  | 
 大对象尽量用clone()不用new  | 
 new创建对象成本大  | 
| 
 17  | 
 尽可能地使用java自身提供的api  | 
 不解释  | 
| 
 18  | 
 使用快速度的jdbc驱动  | 
 数据库连接池  | 
| 
 19  | 
 缓存DataSorce  | 
 为了再次的JNDI调用,可以系统中缓存要使用的DataSorce  | 
| 
 20  | 
 让访问实例内变量的setget方法变成final  | 
 可变成inlined  | 
| 
 21  | 
 charat代替startswith  | 
 --  | 
| 
 22  | 
 如果只有一个字符的’’代替””  | 
 --  | 
| 
 23  | 
 常量字符串,用String代替StringBuffer  | 
 减小运行开销提高性能  | 
| 
 24  | 
 Stringtokenizer分析字符串更容易,效率也会高一些  | 
|
| 
 25  | 
 使用三目运算代替if-return else  | 
 --  | 
标签:
原文地址:http://www.cnblogs.com/strive-for-freedom/p/4231341.html