`

性能调优之七: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()的系统调用开销,避免了循环体重复调用。


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



 

 

 

 

 

分享到:
评论

相关推荐

    J2EE应用性能调优.docx

    【性能调优--7:J2EE后台层面调优】 后台服务优化主要包括: 1. **数据库查询优化**:使用索引、避免全表扫描,减少JOIN操作。 2. **事务管理**:合理设计事务粒度,避免长时间锁定资源。 3. **批处理与异步处理**...

    EBS性能调优之全面挖掘_V4.2(ebs性能优化、oracle性能优化、linux性能优化)

    EBS(Oracle E-Business Suite)性能调优是一项关键任务,它涉及多个层次的优化,包括存储设备、主机、数据库、应用系统、网络和客户端。此文档重点聚焦于应用系统和数据库层面的调优策略,同时也涵盖了一部分Linux...

    weblogic10性能调优

    "WLS Performance Tuning.ppt"很可能是整个调优过程的核心,包括JVM内存调优、连接池配置、后台线程管理、数据库连接优化等,这些都是提高WebLogic性能的关键环节。 "WLS10.x new feature.ppt"可能会介绍WebLogic ...

    企业级数据库应用系统性能

    项目的技术栈经历了从J2EE到.NET的重大转变,不仅提升了应用程序的开发和运行效率,还极大地改善了用户体验。此外,该系统采用了最新的Sybase 15系列版本,以充分发挥其高性能和高可靠性的优势。 #### 三、系统逻辑...

    构建高性能J2EE应用的5种策略

    构建高性能的J2EE应用程序是IT领域中的一个重要挑战,尤其在当前大数据和高并发的背景下。J2EE(Java 2 Platform, Enterprise Edition)作为企业级应用开发的标准平台,提供了丰富的中间件服务和组件模型,使得...

    基于J2EE的辅助面访系统.zip

    8. **性能优化**:为了处理大量并发访问,系统可能需要进行性能调优,如缓存策略、数据库索引优化、负载均衡等。 9. **测试与维护**:文档中可能包含了测试计划、测试用例以及后期的维护和更新策略。 通过“基于...

    J2EE网上购物系统

    J2EE是Oracle公司推出的用于开发分布式、多层应用程序的框架,它提供了丰富的服务和组件模型,使得开发者能够构建可扩展且健壮的网络应用。 在本项目中,SSH(Struts2、Spring、Hibernate)是一个常见的Java开发...

    基于J2EE的技术论坛系统

    此外,可能会涉及到用户体验优化、性能调优和错误日志记录等方面,以确保论坛的稳定性和用户体验。 总的来说,这个基于J2EE的技术论坛系统充分体现了Web应用程序设计的基本原则,包括用户友好性、功能完整性和可...

    [高级Java开发工程师岗位具体内容说明]java开发工程师岗位简介 (2).pdf

    2. **性能调优**:进行系统优化,确保系统稳定、快速、安全。 3. **代码规范**:制定开发规范,审核代码质量。 4. **技术创新**:引入新技术和解决方案,创新解决问题。 5. **教育背景与经验**:计算机相关专业,...

    ctg管理win.pdf

    - **性能优化**:定期进行性能调优,比如调整线程池大小、缓存策略等。 #### 七、案例分析 虽然文档中并未明确提供具体的案例分析,但从上述介绍可以看出,CTG在实际应用中有广泛的用途。例如,在一个大型零售企业...

    网上图书销售系统参考.pdf

    部署则包括安装应用程序服务器,配置环境变量,发布Web应用,以及进行系统集成和性能调优,以确保系统在实际环境中稳定运行。 总结起来,这篇论文深入探讨了使用J2EE开发网上图书销售系统的各个方面,从需求分析到...

    jreport产品介绍.pptx

    2. **JReport Server**:作为后台管理系统,负责权限管理、性能调优、集群管理和监控分析。它提供了DHTML展示,可以解析报表、安排计划任务,并支持LIVE数据和Ad hoc查询。用户还可以将报表导出为各种格式,如HTML、...

    EJB_WEBLOGIC集中营

    6. **性能监控与诊断**:通过WebLogic的管理控制台,可以实时监控服务器状态,进行性能调优,并提供诊断工具帮助排查问题。 对于初学者来说,理解EJB和WebLogic之间的关系以及它们在J2EE架构中的角色至关重要。学习...

    数据库性能监控分析系统的设计与实现 (2005年)

    为了帮助数据库管理人员有效地进行性能分析和调优,本文提出了一种基于J2EE技术的数据库性能监控分析系统的设计与实现,该系统简称为DMI(Database Management Insight)。DMI系统旨在辅助数据库管理人员对数据库...

    Apache Tomcat JBOSS Nginx区别

    Jetty 是基于 Tomcat 内核的 Servlet 容器引擎,并加以审核和调优。Jetty 通过使用 APR 和 Tomcat 本地技术的混合模型来解决 Tomcat 的诸多不足,例如性能问题和受限的集成平台问题。Jetty 能够提供数据库连接池服务...

Global site tag (gtag.js) - Google Analytics