BEA WebLogic平台下J2EE调优攻略-1

上一篇 / 下一篇  2011-12-14 17:58:44 / 个人分类:其他

51Testing软件测试网Kh4n+C@ o Li

1.1.1 通用代码调优
l&{1Id2xBK gl0
v c&HOZdPy{e01.1.2 减小没有必要的操作
6ZJ2Xgl0  对象的创建是个很昂贵的工作,所以我们应当尽量减少对象的创建,在需要的时候声明它,初 始化它,不要重复初始化一个对象,尽量能做到再使用,而用完后置null有利于垃圾收集。让类实现Cloneable接口,同时采用工厂模式,将减少类的创建,每次都是通过clone()方法来获得对象。另外使用接口也能减少类的创建。对于成员变量的初始化也应尽量避免, 特别是在一个类派生另一个类时。
C6d$P3JY0
3V+khU"IoPc0  异常抛出对
性能不利。抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为, fillInStackTrace()的本地(Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。 异常只能用于错误处理,不应该用来控制程序流程51Testing软件测试网:sJ9P_#dsHL6xQ

4Ft!w]I7z$c'hA0  此外, 建议关闭Debug输出,尽量少用串行化、同步操作和耗时昂贵的服务(如Date())。51Testing软件测试网o$FC0WG,Gcv+HuK

S1IX)k E#T1bN/[zk01.1.3 使用合适的类型51Testing软件测试网:N u1ta'R*mS
  当原始类型不能满足我们要求时,使用复杂类型。String和StringBuffer的区别自不必说了,是我们使用最多的类型,在涉及到字符运算时,强烈建议使用StringBuffer。在做String匹配时使用intern()代替equal()。51Testing软件测试网UNA8K7z Oc

B l9r}?oj]7Ng0  带有final修饰符的类是不可派生的, 如果指定一个类为final,则该类所有的方法都是final。51Testing软件测试网z*k ]NqCw8X

3m z%Z;J;GZ;@yV3_(X0  
Java编译器会寻找机会内联所有的final方法,这将能够使性能平均提高50%。类的属性和方式使用final或者static修饰符也是有好处的。
Z!dn2k#JL4l5D051Testing软件测试网d)C tT!j:b @R9`6p
  调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。所以尽量使用局部变量。
'u![Q9}q1I051Testing软件测试网!I3}\P)\b0Pm
  ArrayList和Vector,HashMap和Hashtable是我们经常用到的类,前者不支持同步,后者支持同步,前者性能更好,大多数情况下选择前者。
H!y'{2TK"j#xn(q0
-nvH}It-w01.1.4 尽量使用pool,buffer和cache
s!g X+Ig2b!WAHP0  使用pool、buffer和cache能大大提高
系统的性能,这在J2EE的大部分技术中都是适用的。
FL8[3rc0
7uv+L|WvF*F/{m0  在
WebLogic中就大量使用了池:JDBC Connection Pool、Socket Pool、Object Pool和Thread Pool。I/O操作中,buffer是必须的,特别是对大文件的操作,不然容易造成内存溢出。字节操作最快,所以尽可能采用write(byte[]),Buffered FileOutputStream比Buffered FileWriter要快,因为FileWriter需要Unicode到Byte的转换。51Testing软件测试网:c$u2uj:ZXNi1o9o{
51Testing软件测试网~J;G-lt
  而后面讲到的JDBC、JSP、EJB和JMS我们都非常建议使用buffer和cache。为HttpServletResponse设置buffersize,使用wl-cache,缓存在JNDI树上获取的对象等等。
ud{y4[ yp/vR051Testing软件测试网N:S!|#CogW,w
  此外,使用JDK 1.4的非阻塞I/O对性能也有很大提高。

&ITy|U-Z051Testing软件测试网-o!]){#p^a

1.2 JDBC代码调优
4g n^:o5Qvh1Fq'~S01.2.1 严格资源使用51Testing软件测试网*qg K8S W:`4d$q
  JDBC代码调优最大的原则就是使用WebLogic的连接池,而不是自己直连数据库。在我接触的很多自己实现连接池的项目中,大部分遇到死锁和连接泄漏的问题,最后得不得修改代码。而WebLogic提供了功能强大,性能良好的数据库连接池,我们要做的只是封装一个连接管理类,从JNDI树上获取数据源并缓存,得到连接,并提供一系列关闭数据库资源的方法。51Testing软件测试网A!@]/t@ x~:Uo
51Testing软件测试网0S~[4S7A D
  对任何资源使用的原则是用完即关,不管是数据库资源、上下文环境,还是文件。数据库资源的泄漏极易造成内存泄漏,乃至系统崩溃。在使用完数据库资源后依次关闭ResultSet,Statement和Connection,而在一个数据库连接多次进行数据库操作时要特别注意ResultSet和Statement依次关闭。51Testing软件测试网Y(bJm"X
51Testing软件测试网z%L!pl?
try{
5\Wp sYI&t\0  //open connection51Testing软件测试网 @Utp0]u
  pstmt =conn.prepareStatement(strSql1);
(p5UD2S8f(}'l0  pstmt.executeUpdate();51Testing软件测试网j1K4aH#X9@ M0Q2dw L
  pstmt.close();
.SpBowD0  pstmt =conn.prepareStatement(strSql2);51Testing软件测试网Uj?6\kB
  rs=pstmt.executeQuery();
ze5~rW Qa0  while (rs.next()){51Testing软件测试网4Y6DD~#V+?2W
  //process51Testing软件测试网} fu{"`k(|&w
 }51Testing软件测试网%brw&[O r,NhC h
rs.close();51Testing软件测试网-| E` Tw:J wDpp
pstmt.close();
] EdD {Hi ?0 }catch(Exception e){51Testing软件测试网 {u$M3T`K
  //close rs,psmt,con
(X:sT{@(V#{ q+u%I0}finally{
&wU~bp5i0  //close rs,psmt,con51Testing软件测试网$C,?^4_s*?
}51Testing软件测试网;nG(A C B"gb

rE$yEe:WAZ8R0w01.2.2 实用技巧
@8VH~$Kv(vcu|0  在JDBC操作中还有一些小的技巧跟大家分享:由于获取连接时默认自动提交方式,使用connection.setAutoCommit(false)关闭自动提交,使用PreparedStatement,批量更新,业务复杂或者大数据量操作时使用存储过程,尽量使用RowSet,此外设置记录集读取缓存FetchSize和设置记录集读取方向FetchDirection对性能也有一定的提高。
YPH7A1fK0
k&kW+M'O] {/] oq01.2.3 优化SQL语句51Testing软件测试网[cKT4m"NP `
  SQL语句的优化牵涉到很多数据库的知识,需要与索引配合,因此需要DBA对代码中的SQL进行检查测试。常见的,select *不提倡使用,效率极差,建议显式获取列,即使是所有字段也应罗列,而取总数时使用count(*),为提高cache的命中率,尽量做到SQL重用。对于大数据量的查询,可以充分利用Oracle数据库的特性,每次取出m-n行的数据,实现分页查询。另外,提高性能的好选择可能就是把所有的字符数据都保存为Unicode,Java以Unicode形式处理所有数据,因此,数据库驱动程序不必再执行转换过程。

"W \(a$N9cz"b0

TAG:

 

评分:0

我来说两句

Open Toolbar