此优化基于下列平台技术和服务器等, Struts2.1.8 、Spring 3.0 、Hibernate3.0 ;Tomcat6.0应用服务器;JDK 1.6 ; 连接池采用DBCP;
-----------------------------------------------------------------------------------------------
CPU(核数、频率) Inter® Xeon® CPU E5620 @2.40 16核
可用内存/物理内存 7G/16G
硬盘(可用容量/总容量) 345G/683G
网卡(100M/1000M) 1000M
网络带宽(M) 1Gps
OS(版本/位数) Windows 2003(32位)
软件名/版本 SQL server 2008数据库
代码级别
a. 用局部变量代替全局变量
b. 类变量不要重复创建,尤其是在大for循环中。 变量尽量做到重复利用,变量应该在判断语句内实例化。
c. 局部变量用完后,要及时回收,最有效的方法是直接赋值为null
d. 字符串值频繁添加或修改时,最好用StringBuffer(线程安全) 和 StringBuilder (线程不安全) 代替String
e. Pojo 必须纯正, 应该与表结构对应,不能有其他的多余的变量存在, 这样会使实体对象增大。 其他的变量应该要用VO或者DTO来代替。
1. 事务
a. 事务必须在service层
b. 检索数据不需要加事务,事务一般只加在数据添加,更新,删除上
c. Action调用service事务的时候,不要分开调用,这样会开启不同的事务,导致事务不一致,而且事务占用时间,所以,一次完整的操作,事务必须唯一。
2. Hibernate优化配置项
a. 实体之间的关系映射,需要根据业务需求来配置,不要配置多余重复的关联,例如:
订单 和 订单详细信息 是一对多的关系, 我们只需要配置单项关联即可,根据业务需求,从订单详细信息不需要知道订单的信息。
b. 一对多,多对多映射中,Lazy=“false”尽量少用,特别是关联层级较深的。我们可以通过以下配置解决必须使用即时加载的问题:在web.xml中添加如下过滤器即可
c. Hibernate排序会检索全表,会把所有的对象全表加载到内存,导致hibernate分页排序时没有达到理想的效果,如果数据量大,建议在 hibernate 分页中,不要加入
排序,把需要的数据取出来后,通过程序排序也未尝不可。
d. 检索数据量大,用query.list(); 数据量小,用query.iterator().
3. 连接池
a. 配置项如下:applicationContext.xml
b. destroy-method=”close”必须配置,当用户退出操作时,自动关闭连接的方法。maxIdle(最大空闲连接数),minIdle(最小空闲连接数), maxActive(最大活动连接数), initialSize(初始化连接数),maxWait(超过连接池配置的最大连接数时等待的时间,如果超过等待的时间,连接失效,自动断开)。具体如何填写,需要根据实际情况而定,最好通过多次试验,确定最好的组合
4. Tomcat线程配置
如何配置最好,需要根据业务需求来判定,结果多次试验到达最好。
5. Jvm配置
a. catalina.bat中加上如下内容:set JAVA_OPTS=-Xms512m -Xmx512m
-Xms:最小堆内存
-Xms: 最大堆内存
6. 参考资源
http://www.189works.com/article-61975-1.html http://www.189works.com/article-66556-1.html http://blog.sina.com.cn/s/blog_59f625000100lvsc.html http://www.189works.com/article-65895-1.htmlk http://www.189works.com/article-58285-1.html http://www.189works.com/article-68373-1.html http://www.189works.com/article-61350-1.htmlhttp://www.189works.com/article-66592-1.html
备注:与同事在实践过程中汇总