优化实践
1 .使用1.try{}catch
1 )不在查询中使用try{}catch ) )语句
2 )循环中不使用try{}catch ) )语句
3 )异常处理最好不要对所有异常捕获使用Exception,而是捕获相应的异常类型并处理日志方式。
1、打印错误日志
2、调用错误业务逻辑处理函数
3、跳转到错误提示页面
4 )通过finally销毁对象或释放资源的finally块码,无论try{}catch ) }是否发生异常都会被访问,因此在此进行资源的释放、对象的销毁工作
5 )对外提供的界面如有异常,投try
{
OS.write(bytebuffer;
} catch (扩展e ) )
{
e .打印任务跟踪(;
(} finally
{
os.close (; //释放资源
os=null;
destfile=null;
}
2 .减少使用new关键字创建对象
1 )不在循环中使用new关键字创建对象
JVA测试码(2)以10000次为测试标准,结果周期时间为:16ms; 新对象(); 注释、打印结果,循环时间为:0ms; 由此可见,创建对象是一笔相当大的费用。
2 )仅在需要创建对象时创建
Java测试代码(3)。
3 .乘除运算是否可以使用移位运算
1 )乘数或除数是否为2的平方根
2 )乘除运算在循环中重复
4 .注意循环的写法
1 )读取减少循环次数的变量
Java测试代码(4)
2 )嵌套在循环中的循环向外书写小循环
3 )不在循环中频繁声明对象
Java测试代码(5)。
4 )不在循环中调用同步方法
Java测试代码(6)
5 )避免在循环过程中执行数据库查询操作
5 .实现字符串拼接
1 ) String、StringBuffer、StringBuilderString的非可变字符数据类的拼接,每次使用“=”时都会引入中间的临时变量,不推荐。
不建议使用StringBuilder可变字符串对象,因为线程不安全。
建议使用可变字符串对象、线程安全和当前线程,因为只有一个StringBuffer对象实现了字符串长度更改。
2 )单个字符加起来用“”替换”(对于单个字符,使用StringBuffer有点浪费,但“”使用的是char型数据,所以比String更合适。
Java测试代码(7)。
HashMap遍历效率
HashMap实现了Map界面,其基础是用Entry对象操作key和value,Map的扫描是用Hash值取出对应的Entry进行比较的结果。 for (实体条目: paramap.entryset ()
{
values=entry.getValue (;
//system.out.println(values[0];
}
7 .尽量使用局部变量
调用方法时传递的参数和在调用过程中创建的临时变量存储在堆栈中,速度很快。 其他变量,如静态变量和实例变量,都是在堆中创建的,速度较慢。
Java测试代码(8)。
8 .尽量实现客体复用
1 )字符串对象复用(StringBuffer ) )
2 )声明对象重用(for循环) )。
3 )减少对象初始化)单实例模式)缺省情况下,调用类的构造函数时,Java会将变量初始化为确定的值。 所有字符串变量均设置为null,整数变量(byte、short、int、long )设置为0,float和double变量设置为0.0,逻辑值设置为faaable
Java测试代码(9)。
4 )合理使用继承和抽象
9 .释放空闲资源
1 )记住断开数据库访问链接
2 )记住关闭I/O输入/输出流
3 )对象使用完成后,请在空闲对象使用完成后手动为空。
Java测试代码(10 )。
10 .使用ArrayList、Vector和链接列表
1 )阵列沥
st实现随机查找和遍历2)Vector实现数组同步操作
3)LinkedList数据的动态插入和删除
11.synchronized的使用
1)方法的同步一旦有一个线程在访问该方法,方法将陷入等待或阻塞,只有用户线程方法解锁后才能被其他线程调用。
Java测试代码(11)
2)代码块同步此同步是为了保证一个线程中特殊的对象操作而存在的,比如多个用户有权限操作同一公共资源的时候就需要使用该方式实现资源的同步操作。
Java测试代码(12)
12.三元表达式代替if elsepublicString express(booleanflag)
{
returnflag ?"成功":"失败";
}
13.StringTokenizer代替substring()和indexOf()StringTokenizer是java中object类的一个子类,继承自 Enumeration( public interface Enumeration实现 Enumeration(列举) 接口的对象,它生成一系列元素,一次生成一个。)接口。
StringTokenizer 可以理解为String的字符标记对象,此对象可以实现字符串的截取操作,避免了字符串容易导致StringIndexOutOfBoundsException的问题。其构造器有下面三种形式:
·public StringTokenizer(String str,String delim,boolean returnTokens);
·public StringTokenizer(String str,String delim);
·public StringTokenizer(String str); 其中,str为需分析的字符串,delim为定界符,Tokens描述是否将定界符作为一个token(令牌)。
Java测试代码(13)结果打印的都是:boonya
14.System.arraycopy()实现数组值的拷贝
Java测试代码(14)
15.instanceof判断接口而不是接口的实现类
16.将类中不变的实例静态化如果类中的变量不会随他的实例而变化,就可以定义为静态变量,从而使他所有的实例都共享这个变量。public class AlarmDao extends BaseDao
{
private static SortUtil sortUtil = new SortUtil();
}
17.仅查找单个字符用charAt()代替startsWith()
Java测试代码(15)
18.使用单元测试代替main方法
19.在数据库应用程序中使用批处理
20.线程使用技巧
1)使用大量线程(Threading)的场合使用线程池管理
2)防止过多的同步
3)同步方法而不要同步整个代码段
4)在追求速度的场合,用ArrayList和HashMap代替Vector和Hashtable
5)使用notify()而不是notifyAll()
6)不要在循环中调用 synchronized(同步)方法
循环中调用 synchronized
7)单线程应尽量使用 HashMap, ArrayList
21.I/O技巧
1)使州缓冲提高I/O性能
2)lnputStream比Reader高效,OutputStream比Writer高效
3)在适当的时候用byte替代char
4)在finally 块中关闭stream
参考文献: