一般每个页面点击一次,内存使用增加几百K不等,但有一张大图(约1M),打开时却用了70M内存,晕了。

解决方案 »

  1.   

    这些页面都有数据库连接,而且都及时执行了rs.close()
      

  2.   

    我觉得不是你代码的问题,就是server的问题。
      

  3.   

    我没有用连接池,就一个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;
      }
     }
      

  4.   

    你的conn,stmt 都没有关闭,你只在jsp里关闭了rs,我想可能是这个原因。一般好象不要返回ResultSet,你返回List对象不就好了吗。
      

  5.   

    啊,?不返回ResultSet我能得到结果集合吗?
    我的conn,stmt应该在关闭?
      

  6.   

    老兄,你会不会简单的javabean啊,你把ResultSet中的数据放到list对象中,list是个对象数据。你返回list不就达到一样的效果了吗!一般在java文件里就把conn,stmt,rs全部关闭。
      

  7.   

    呵呵,我就是不会才问呀,我如果在javabean里面把conn和stmt关了就不能在JSP页面得到记录集了
      

  8.   

    List我不会啊,能否指点,帮忙改改程序,多谢了
      

  9.   

    public class Abc { private int QandADataId;

    public int getQandADataId() {
    return QandADataId;
    }
    public void setQandADataId(int integer) {
    QandADataId= integer;
    }
    }
      

  10.   

    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);
    }
      

  11.   

    上面的修正一下
    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对象怎么用就好了
      

  12.   

    我在bean加入了,但是似乎效果不太明显
    public void destroy()
    {
    try
    {
    stmt.close();
    conn.close();
    }
    catch(Exception e)
    {System.err.println("DBOperate.destroy():"+e.getMessage());}
    }
      

  13.   

    在jsp页面中关闭conn和stmt也可以啊!
      

  14.   

    我就是在JSP页面调用这个destroy方法啊,还有其它办法吗?
      

  15.   

    conn.close();
    conn=null;
    .....
    .....
    .....
      

  16.   

    bean的scope是什么?如果你在每个页面创建一个scope为applicaiton或者seesion的bean,内存自然要费掉一些了。
      

  17.   

    bean 的scope是 pageIO流我就不知道了
      

  18.   

    有种可能就是你把资源当作类(jsp文件编译后的.class文件)的成员属性了,那么因为
    他是单一实例,除非你当掉application server,否则他是一直存在把你的jsp代码贴上来看看
      

  19.   

    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());
      }
    }
      

  20.   

    javabean里加一个释放的函数,
    调用完以后释放资源
      

  21.   

    我这个destroy函数是有的,不过没有System.gc()
    还有,我已经在JSP页面rs.close()了
    ,应该在destroy()函数里不用rs.close()了吧
      

  22.   

    用了System.gc() 页面执行速度有很大程度的下降
      

  23.   

    把结果压缩到集合类中,并返回之,同时把用到的conn,stmt,rs都关掉!
      

  24.   

    同意 VVV_lucky(*太阳*) 的话,你有的什么web server?
    我们已前用jrun4 发现垃圾之至,跟你说的一样,现在用tomcat好多了。