性能调优之七:J2EE后台程序调优
调优原则:
1、 减少数据库访问次数
(1) 使用数据缓存的存取方式
(2) 使用批量处理的方式
?
2、 减少SQL语句的执行时间
(1) 使用占位符的访问方式
?
(2)?优化SQL的执行计划(比如使用数据库索引或者调整SQL)
3、 减少程序执行的时间
(1) 使用异步调用代替同步调用
?
(2) 使用本地API方式代替远程调用(比如WebSerivce)
?
(3) 减少同步块或者同步方法的使用
?
(4) 减少IO读写
?
4、减少请求压力
(1) 使用应用集群部署方式分担掉服务器的压力
?
(2) 将静态文件和动态文件分离部署,减少J2EE容器的压力
?
?
高效Java编程注意事项
?
1、尽量避免不必要的方法调用
原则:在Java中,一切都是对象,如果有方法(Method)调用,处理器先要检查该方法是属于哪个对象,该对象是否有效,对象属于什么类型,然后选择合适的方法并调用。尽可能在外层确定是否一定要执行该方法。
示例:
?
?
public void CallMethod(int i ){ if( i ==0 ){ return; } ... // 其他处理}int i = 0;...CallMethod(i);改为:int i = 0;...if( i ==0 ){ CallMethod(i);}??
?
2、尽量避免不必要的对象创建
原则:当一个对象是用new进行初始化时,其构造函数链的所有构造函数都被调用到,所以new操作符是很消耗系统资源的,new一个对象耗时往往是局部变量赋值耗时的上千倍。同时,当生成对象后,系统还要花时间进行垃圾回收和处理。尽量少用new来初始化一个类的实例, 当new创建对象不可避免时,注意避免多次的使用new初始化一个对象,尽量在使用时再创建该对象。
示例:
NewObject object = new NewObject();int value;if(i>0 ){ value =object.getValue();}?可以修改为:int value;if(i>0 ){ NewObject object = new NewObject(); Value =object.getValue();}?3、尽量减少对变量的重复计算体原则:循环是比较重复运行的地方,如果循环次数很大,循环体内不好的代码对效率的影响就会被放大而变的突出。当有较大的循环时,应该检查循环内是否有效率不高的地方,寻找更优的方案加以改进。示例:
Vector vect = new Vector(1000);...for( int i=0; i<vect.size(); i++){ ...}?可以修改为:int size = vect.size();for( int i=0; i>size; i++){ ...}?注意:如果size=1000,就可以减少1000次size()的系统调用开销,避免了循环体重复调用。StringBuilder builder = new StringBuilder(100);当声明Vector vect=new Vector()时,系统调用:public Vector() {// 缺省构造函数 this(10); // 容量是 10;}缺省分配10个对象大小容量。当执行add方法时扩充容量。Map map = new HashMap(); Iterator iter = map.keySet().iterator(); while (iter.hasNext()) { Object key = iter.next(); Object val = map.get(key); }Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey(); Object val = entry.getValue(); }?第一种对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。第二种entryset只是遍历了第一次,他把key和value都放到了entry中,所以会比第一种快。?
?
?
?
?