jvm虚拟机默认Heap大小64M,通过设置其大和小值来实现
参考 Java heap space

解决方案 »

  1.   

    list.clear();之后再做一次垃圾回收试试看。
    另外把堆空间开大些,也许内存占用会停在某个地方不再增长了,这主要是防止updateCar的某一次调用需要的空间很大(这次的记录行数太多),结果超出。
      

  2.   

    一般不是不推荐自己手动调用gc进行垃圾回收的吗?它会破坏JVM中对象之间的链路关系,影响后续JVM自己回收垃圾时对对象引用的判断么?
      

  3.   

    一般不是不推荐自己手动调用gc进行垃圾回收的吗?它会破坏JVM中对象之间的链路关系,影响后续JVM自己回收垃圾时对对象引用的判断么?
    不会吧?哪里来的说法?官方的?如果只是调用一下gc,就影响了jvm自己对对象引用的判断,那么这个垃圾回收算法也太脆弱了吧?这样的算法就该扔掉了!手工gc只是通知一下jvm可能的情况下尽快回收一次,至于应该怎么回收,仍然由jvm说了算,又不是你自己写程序回收的。既然jvm说了算,他自己回收了一次,第二次就不行了?这个太不符合逻辑了。
      

  4.   

     大牛 刚去看了下,gc 也只是告诉jvm该回收垃圾了,具体何时回收那还是JVM说了算  记错了,不推荐使用的是finalize() 方法。
      

  5.   

    遇到过这个问题,jsp的,把tomcat重新换个目录,如d盘根目录。
      

  6.   

    你每次都这么巧在这里报错吗?t.put("isOpen", rs.getString("isOpen"));//此处报出错误信息
    大概看了一下你这段代码没发现什么能造成明显内存泄露的地方,你检查过你的其他代码吗?
      

  7.   

    感谢大家昨天的回复,我试了一下,今天错误的位置报告在方法里
    public boolean updateCar(String imei,String locdate,String jd,String wd,String fx,String isOpen,DataBaseConnection d){
    System.gc();
    boolean ret=false;
    StringBuffer sb=new StringBuffer();
    sb.append("update cheliang set")
    .append(" jd=").append(jd).append(",")
    .append(" wd=").append(wd).append(",")
    .append(" fx=").append(fx).append(",")
    .append(" locdate=").append("'").append(locdate).append("'");
    if("0".equals(isOpen)){
    sb.append(" ,state='6'");
    }
    sb.append(" where imei=").append("'").append(imei).append("'"); //System.out.println(sb.toString());
    d.executeUpdate(sb.toString());//此处报错
    ret=true;
    return ret;
    }
    错误信息依旧,实在看不出有哪里内存泄露了,昨天晚上11点开的服务,今天早上7点半蹦的
      

  8.   

    jdk1.8有个 Java Mission Control,应该可以分析什么东西占用了大量内存,你可以在7、8个小时的时候用这个找找,应该有帮助。1.7有没有不知道。