简单地说,就是连续8次操作Vector,每个Vector里面封装>100个对象,比如:
浏览A表,有>100条记录,再点击,浏览B表,也有>100条记录,如果这样多次
浏览,Tomcat就开始吃内存。
help

解决方案 »

  1.   

    这个应该牵涉到很多方面的问题,一个是硬件,另外软件环境也有影响。
    1。尽量用JDBC支持的数据库,尽量不要用JDBC-ODBC桥来驱动,后者先天不足(慢),如果你一定要用JDBC-ODBC的话,那你就要考虑设计的问题了,
    2。换一种数据库试一试,并不是说要求这个项目换数据库,而是通过这样可以发现一些问题。
    3。SQL语句尽量优化,依你所说有8次数据库查询,你应该找出这8次查询中,哪条语句是罪魁祸首,或者说都慢。
    4。换个SERVER试试,RESIN可以考虑,对中文支持好,免去后期开发的很多烦恼
      

  2.   

    Vector最好不要在for之类的循环里new,尽量重用!
      

  3.   

    哦,建议不要使用Vector传,做成类似C里的结构那样的封装类可能会好些??
      

  4.   

    谢谢大家,我再补充一下:
    1。我用的是jdbc,数据库是oracle,这样的结构比较通用吧,:-)
    2。查询语句都是最简单的select语句。比如:slect * from tb
    除去server、硬件等(非人为因素)影响,还有没有其他解决方法?
    c++里面类的方法都是静态的,所以我想从技术角度讲
    还有什么应该注意的?
      

  5.   

    你不会把各个表都取出来放到Vector里吧。还是没太能明白你的需求,不过费时的操作如果可能最好分成几步来做好一点。还有就是Vector是线程安全的,所以会损失一些效率。
      

  6.   

    一个表对应一个Vector,呵呵,当然有的地方是多表查询的
      

  7.   

    用的是连接池(因为机密问题,所以不好把原码贴出来,sorry)
    类的方法里面,都是新建一个连接,然后再关闭,如:            
    //新建
    if(ConnMgr==null)
                    ConnMgr=DBConnectionManager.getInstance();
                if(conn==null)
                    conn=ConnMgr.getConnection("db");
    //释放 
    finally{
                if(ConnMgr!=null){
                   ConnMgr.freeConnection("db",conn);
                }
            }
      

  8.   

    肯定不是数据量的问题了,就算一条纪录1k,也不过1k*100*8,还不到1M。
    所以肯定是数据库资源没有释放。你用的连接池是不是有问题?你用连接池的方法是不是有问题?
      

  9.   

    最简单的办法,不用连接池,就用最基本的jdbc,看看有没有问题。如果没问题,那肯定就是连接池的问题或者是连接池使用的问题