调优原则:
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()的系统调用开销,避免了循环体重复调用。
4、生成对象时,分配合理的空间和大小
原则:Java中的很多类都有它的默认的空间分配大小,对于一些有大小的对象的初始化,应该预计对象的大小,然后使用进行初始化。
示例:
StringBuilder builder = new StringBuilder(100);
当声明Vector vect=new Vector()时,系统调用:
public Vector() {// 缺省构造函数
this(10); // 容量是 10;
}
缺省分配10个对象大小容量。当执行add方法时扩充容量。
5、使用StringBuilder代替String
原则:String是用来存储字符串常量的,如果要执行“+”的操作,系统会生成一些临时的对象,并对这些对象进行管理,造成不必要的开销。如果字符串有连接的操作,替代的做法是用StringBuilder的append方法,StringBuffer是有同步机制的,效率上没有StringBuilder快。
6、控制查询返回的结果条数
原则:当查询返回的数据量过大时,通过截取前面100条的数据返回,不然将严重影响系统的响应时间。
7、多线程不能使用HashMap
原则:HashMap没有同步机制,用于多线程的频繁读写会产生线程死锁的情况。推荐使用ConcurrentHashMap来代替HashMap,在初时化时尽量传入大小容量。
8、不要在循环中使用try…catch
原则:在循环中使用try…catch的话会造成多次异常判断逻辑,尽量做到一个方法最多只有一个try…catch块。
9、使用高效的HashMap的遍历
低效率的遍历方式::
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中,所以会比第一种快。
高效SQL编写注意事项:
1、尽量不用通配符“%”或者“_”作为查询字符串的第一个字符
当通配符“%”或者“_”作为查询字符串的第一个字符时,索引不会被使用。比如用 T 表中 Column1 LIKE ‘%5400%’ 这个条件会产生全表扫描,如果改成 Column1 ‘X5400%’ OR Column1 LIKE ‘B5400%’ 则会利用 Column1 的索引进行两个范围的查询,性能肯定大大提高。
2、尽量EXISTS替换IN 操作符(主要考虑索引是否能用上的问题)
基本上所有的 IN 操作符都可以用 EXISTS 代替,在选择 IN 或 EXIST 操作时,要根据主子表数据量大小来具体考虑。
3、用 UNION ALL 代替 UNION
UNION 是最常用的集操作,使多个记录集联结成为单个集,对返回的数据行有唯一性要求, 所以 oracle 就需要进行 SORT UNIQUE 操作(与使用 distinct 时操作类似),如果结果集又 比较大,则操作会比较慢;
UNION ALL 操作不排除重复记录行,所以会快很多,如果数据本身重复行存在可能性较
小时,用 union all 会比用 union 效率高很多!
4、SELECT子句中避免使用“*”号
ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。
5、尽量用 NOT EXISTS 或者外连接替代 NOT IN 操作符
因为 NOT IN 不能应用表的索引。
6、尽量不用“<>”或者“!=”操作符
不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。比如:a<>0
改为 a>0 or a<0
分享到:
相关推荐
性能调优--0:前言 2 性能调优--2:性能调优方法 4 ...性能调优--7:J2EE后台层面调优 10 性能调优--8:J2EE前台层面调优 15 性能调优--9:JVM参数调优 16 性能调优--10:一个项目的性能优化经验 16
《Java 网络程序设计: J2EE》光盘 包含其中的三个程序源码
程序天下:J2EE整合详解与典型案例.教程.光盘 第二部分
《Java Web应用开发:J2EE和Tomcat》教程第二版 编著: 蔡剑,景楠
Java Web应用开发:J2EE和Tomcat(第2版).part1
包括J2EE的课件PPT,内容条理清晰,可以帮助自学的朋友
J2EE调优J2EE调优J2EE调优J2EE调优
必须保证调优后的程序运行正确。 性能更大程度是取决于良好的设计,调优技巧只是一个辅助手段。 调优过程是叠代渐进的过程,每次调优的结果要反馈到后续的代码开发中去。 性能调优不能以牺牲代码的...
程序天下:J2EE整合详解与典型案例.教程.光盘 第一部分
语言程序设计资料:J2EE中文教材.doc
J2EE性能调优.pdfJ2EE性能调优.pdfJ2EE性能调优.pdfJ2EE性能调优.pdfJ2EE性能调优.pdfJ2EE性能调优.pdfJ2EE性能调优.pdfJ2EE性能调优.pdfJ2EE性能调优.pdfJ2EE性能调优.pdfJ2EE性能调优.pdf
Java性能调优 j2ee性能调优....
为什么J2EE应用程序性能慢? 了解系统限制和设定调优目标 建立性能调优策略 决定调优时机 ...J2EE应用程序性能调优分析 如何调优J2EE数据访问层 Jsp和servlet调优 常见应用服务器调优 Java垃圾回收机制分析
[程序天下:J2EE整合详解与典型案例.教程_光盘3.rar
[程序天下:J2EE整合详解与典型案例.教程_光盘4.rar
架构学习:J2EE平台多层体系架构
JAVA WEB 应用开发:J2EE和TOMCAT................
JAVA入门: J2EE的学习流程
开发者突击:Java Web主流框架整合开发:J2EE+Struts+Hibernate+Spring 部分例子源代码 及数据库
JAVA面试题总汇:j2ee面试知识.pdf