原文地址:http://user.qzone.qq.com/1159340782/2java
略微牺牲一些性能,换来更好的可读性和可维护性是好的选择。如下不提倡和提倡的写法仅供参考。正则表达式
不提倡的写法api |
缘由数组 |
|
1缓存 |
尽可能避免随意使用静态变量工具 |
静态变量和类同步,类不卸载,对象将常驻内存,直到程序终止性能 |
2ui |
尽可能避免过多过常的建立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 |
-- |