最近怀疑这段程序会吃光内存,但是我用完对象以后全部释放的,不是CLOSE就是NULL~

解决方案 »

  1.   

    里面有用到
    BufferedReader 和StringBuffer
      

  2.   

    和bufferReader和string buffer关系不大吧,帖上来认为有问题的代码,一块分析下先
      

  3.   

    检查你的sql,不要一下子查询出所有记录
      

  4.   

                                                    if ("" != mate)
    br = new BufferedReader(new InputStreamReader(
    matein, mate));// 将写入的信息读出来
    else
    br = new BufferedReader(new InputStreamReader(
    matein));// 将写入的信息读出来
    baiduUrl = null;
    urlcon = null;
    System.out.println("...。...结束URL连接,并且装入开始LINE");
    int nextBoy=0;
    while ((line = br.readLine())!= null&&nextBoy<600){
    nextBoy++; sb.append(line);  //////////////////////////////就是卡在这句,程序都会卡住,而我在其他地方引用同样的WHILE却不会卡住,很奇怪的问题
    }
    line = sb.toString();
    sb = new StringBuffer("");
    System.out.println("..................装入SBSB完毕");
    in.close();
    matein.close();
    br.close();
    in = null;
    matein = null;
    br = null;
    另外,数据库中没有做全部读出的操作,操作如下:
     public Keyword  getKeyword(){
          try {
              Object obj=getHibernateTemplate().execute(new HibernateCallback(){  public Object doInHibernate(Session session) throws HibernateException, SQLException{
      Query query=session.createQuery("from Keyword as kw where kw.status=0");
      Keyword kw=(Keyword)query.setMaxResults(1).uniqueResult();
      //马上改状态为1(处理中) 防止其他服务器重复读取该关键字
      try{
      if(kw!=null){
      kw.setStatus(new Long(1));
      session.save(kw);
      session.flush();
      }
      return kw;
      }catch(StaleObjectStateException e){
      //程序出现这个异常,说明已经有服务器对这个关键字进行处理了,需要重新选择一个关键字
    //  System.out.println("数据被修改了");
      session.clear();
      session.close();
      return getKeyword();
      }
      }
              });
                 return (Keyword)obj;         } catch (RuntimeException re) {
                 log.error("get failed", re);
                 throw re;
             }
        }
      

  5.   

    我运行24小时以后,程序也断了,LINUX下查询内存一看剩余内存只有100000了,使用已经900000了,一共内存是1000000