Java web应用内存溢出
我用Java开发的web应用老是出现内存快速增长,最后内存溢出的问题。我用的tomcat5,JDK1.4.2,内存最大设为1498M,有时候也很平稳,但快速增长时,则只增不降,很快就内存溢出了。最近站点登录人数平均一天100人吧,即使几十人也有可能内存溢出。但登录人数多出现这种情况会更频繁。我查阅了很多技术资料,在一些内存开销大的模块都加了System.gc()语句,但都无法解决内存溢出。这次我采用的是四层架构,现将示例代码贴出来,请各位技术高手看看有没有问题。
1、WebUser类是映射web_user表字段的值对象类。
2、DbWebUserImpl实现了数据库表记录进行进行基本的增删改的类。
public class DbWebUserImpl implements DbWebUser{
Connection conn = null;
public Connection getConnection() {
return conn;
}
public void setConnection(Connection connection) {
this.conn=connection;
}
public void updateWebUser(WebUser webUser) throws Exception {
String strSql="update web_user set account=?,passwd=?,nickname=? where user_id=?";
PreparedStatement pstm=null;
try{
pstm=conn.prepareStatement(strSql);
int i=1;
pstm.setString(i++,webUser.getAccount());
pstm.setString(i++,webUser.getPasswd());
pstm.setString(i++,webUser.getNickname());
pstm.setInt(i++,webUser.getUser_id().intValue());
pstm.executeUpdate();
}finally{
if(pstm!=null){
pstm.close();
pstm=null;
}
}
}
}
3、WebUserService是服务层,调用数据访问类的方法,表示层(jsp或action)就直接调用WebUserService类的方法
public class WebUserService extends BaseService{
private DbWebUser dbWebUser=DbFactory.getDbWebUser();
public boolean updateWebUser(WebUser webUser){
Connection conn = null;
try{
conn=DataConnect.getConnection();
dbWebUser.setConnection(conn);
dbWebUser.updateWebUser(webUser);
return true;
}catch(Exception ex){
ex.printStackTrace();
message=ex.getMessage();
return false;
}finally{
try{
if(conn!=null) conn.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
4、表示层(jsp或action)通过调用WebUserService类的updateWebUser方法,来更新web_user表的记录。
例如:
WebUserService webUserService=new WebUserService();
Authorization authorization=(Authorization)session.getAttribute("authorization");
WebUserForm f=(WebUserForm)form;
WebUser webUser=webUserService.getWebUser(authorization.getAccount());
webUser.setNickname(f.getNickname());
boolean bret=webUserService.updateWebUser(webUser);
//webUser=null;
请问各位高手,如果这里不加webUser=null,会不会造成内存泄漏?但我将很多类似的模块都加上了Object=null,仍不能解决内存溢出。
这个问题困惑了我很久,一直无法解决。现在论坛提出,请各位老师帮帮忙,非常感谢!