我的JSP页面,每点击一次,内存使用都增加一些,而且只增不减,怎样才能当前页执行完后,内存自动释放? 一般每个页面点击一次,内存使用增加几百K不等,但有一张大图(约1M),打开时却用了70M内存,晕了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这些页面都有数据库连接,而且都及时执行了rs.close() 我觉得不是你代码的问题,就是server的问题。 我没有用连接池,就一个javabean ,帮我看看,谢谢先,JSP页面肯定都及时用了rs.close()的package mypkg;import java.io.*;import java.sql.*;import java.text.*;import java.lang.*;import java.util.*;public class conndb{ String MyDBDriver="org.gjt.mm.mysql.Driver"; Connection conn = null; Statement stmt = null; ResultSet rs = null; public conndb() { try {Class.forName(MyDBDriver).newInstance();} catch(ClassNotFoundException e) { e.printStackTrace(); } catch (java.lang.InstantiationException e) { e.printStackTrace(); } catch ( java.lang.IllegalAccessException e) { e.printStackTrace(); } } public ResultSet executeQuery(String sql) { try { conn = DriverManager.getConnection("jdbc:mysql://192.168.1.1:3306/mydb?useUnicode=true&characterEncoding=GBK", "root", "password123"); stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = stmt.executeQuery(sql); } catch (java.sql.SQLException e) { e.printStackTrace(); } return rs; } } 你的conn,stmt 都没有关闭,你只在jsp里关闭了rs,我想可能是这个原因。一般好象不要返回ResultSet,你返回List对象不就好了吗。 啊,?不返回ResultSet我能得到结果集合吗?我的conn,stmt应该在关闭? 老兄,你会不会简单的javabean啊,你把ResultSet中的数据放到list对象中,list是个对象数据。你返回list不就达到一样的效果了吗!一般在java文件里就把conn,stmt,rs全部关闭。 呵呵,我就是不会才问呀,我如果在javabean里面把conn和stmt关了就不能在JSP页面得到记录集了 List我不会啊,能否指点,帮忙改改程序,多谢了 public class Abc { private int QandADataId; public int getQandADataId() { return QandADataId; } public void setQandADataId(int integer) { QandADataId= integer; }} List list = new ArrayList();Abc a;for (int i = 0; resultSet.next(); i++) { a= new Abc();a.setQandADataId(resultSet.getInt(resultSet.getString("QandADataId")); list.add(qanda);} 上面的修正一下List list = new ArrayList();Abc a;for (int i = 0; resultSet.next(); i++) { a= new Abc();a.setQandADataId(resultSet.getInt(resultSet.getString("QandADataId")); list.add(a);}你在去查一下list对象怎么用就好了 我在bean加入了,但是似乎效果不太明显 public void destroy() { try { stmt.close(); conn.close(); } catch(Exception e) {System.err.println("DBOperate.destroy():"+e.getMessage());} } 在jsp页面中关闭conn和stmt也可以啊! 我就是在JSP页面调用这个destroy方法啊,还有其它办法吗? conn.close();conn=null;............... bean的scope是什么?如果你在每个页面创建一个scope为applicaiton或者seesion的bean,内存自然要费掉一些了。 bean 的scope是 pageIO流我就不知道了 有种可能就是你把资源当作类(jsp文件编译后的.class文件)的成员属性了,那么因为他是单一实例,除非你当掉application server,否则他是一直存在把你的jsp代码贴上来看看 public void destroy(){ try{ rs.close();// <=== stmt.close(); conn.close(); rs=null; stmt=null; conn=null; System.gc(); }catch(Exception e){ System.err.println("DBOperate.destroy():"+e.getMessage()); }} javabean里加一个释放的函数,调用完以后释放资源 我这个destroy函数是有的,不过没有System.gc()还有,我已经在JSP页面rs.close()了,应该在destroy()函数里不用rs.close()了吧 用了System.gc() 页面执行速度有很大程度的下降 把结果压缩到集合类中,并返回之,同时把用到的conn,stmt,rs都关掉! 同意 VVV_lucky(*太阳*) 的话,你有的什么web server?我们已前用jrun4 发现垃圾之至,跟你说的一样,现在用tomcat好多了。 修改资料后没值的情况?? 我是新手 session取值 HttpClient4文件上传 jsp的session中能否保存查询的记录集对像 Tomcat问题:引用servlet实例错误 这样的SQL查询语句如何写比较好? 关于一个数学题,求相差最小值 各位看看这个servlet如何构造!使用什么技术?讨论讨论! 有没有地方下载linux+jsp+mysql的bbs,要能支持中文的。 jsp文件不能超过40k吗?(在线等) 关于JBOSS的配置问题
帮我看看,谢谢先,JSP页面肯定都及时用了rs.close()的
package mypkg;
import java.io.*;
import java.sql.*;
import java.text.*;
import java.lang.*;
import java.util.*;
public class conndb
{
String MyDBDriver="org.gjt.mm.mysql.Driver";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
public conndb()
{
try
{Class.forName(MyDBDriver).newInstance();}
catch(ClassNotFoundException e)
{ e.printStackTrace(); }
catch (java.lang.InstantiationException e)
{ e.printStackTrace(); }
catch ( java.lang.IllegalAccessException e)
{ e.printStackTrace(); }
}
public ResultSet executeQuery(String sql)
{
try
{
conn = DriverManager.getConnection("jdbc:mysql://192.168.1.1:3306/mydb?useUnicode=true&characterEncoding=GBK", "root", "password123");
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
}
catch (java.sql.SQLException e)
{ e.printStackTrace(); }
return rs;
}
}
我的conn,stmt应该在关闭?
public int getQandADataId() {
return QandADataId;
}
public void setQandADataId(int integer) {
QandADataId= integer;
}
}
Abc a;for (int i = 0; resultSet.next(); i++) {
a= new Abc();
a.setQandADataId(resultSet.getInt(resultSet.getString("QandADataId"));
list.add(qanda);
}
List list = new ArrayList();
Abc a;for (int i = 0; resultSet.next(); i++) {
a= new Abc();
a.setQandADataId(resultSet.getInt(resultSet.getString("QandADataId"));
list.add(a);
}你在去查一下list对象怎么用就好了
public void destroy()
{
try
{
stmt.close();
conn.close();
}
catch(Exception e)
{System.err.println("DBOperate.destroy():"+e.getMessage());}
}
conn=null;
.....
.....
.....
他是单一实例,除非你当掉application server,否则他是一直存在把你的jsp代码贴上来看看
try{
rs.close();// <===
stmt.close();
conn.close();
rs=null;
stmt=null;
conn=null;
System.gc();
}catch(Exception e){
System.err.println("DBOperate.destroy():"+e.getMessage());
}
}
调用完以后释放资源
还有,我已经在JSP页面rs.close()了
,应该在destroy()函数里不用rs.close()了吧
我们已前用jrun4 发现垃圾之至,跟你说的一样,现在用tomcat好多了。