大家好,我的一个jsp网站经常报内存溢出,我知道我的程序肯定有问题,在这里我想和大家一起讨论下内存泄漏问题:
jsp页面中定义的String,vector等变量,或创建的对象是不是一定要在页面末尾加XX=null;不把对象置空行不行?
数据库联接是不是一定要conn.close(),结果集是不是一定要rs.close()?
等等,大家平时碰到的内存泄露方面的问题也可以在这里说说。

解决方案 »

  1.   

    conn.close()是一定要的
    但rs與stmt等如不close()就會內存泄漏了
      

  2.   

    String,vector 等对象呢?一定要置为null吗?
      

  3.   

    大家踊跃讨论下,平时开发中有没有碰到java内存泄漏?
      

  4.   

    数据库的操作必须要关闭的,什么rs,stmt,conn这些东西一定要关上的像啥String,vector这些对象一般不用设置成null,JVM的垃圾回收机制会帮你解决的,这又不是C++,不过你非要这么写也可以,你还可以手动的去调用JVM的垃圾回收,System.gc();但不建议去这么做。
      

  5.   

    System.gc()是运行垃圾回收的,如果不写java虚拟机就会在空闲的时候自动运行。一般是不需要写的。
      

  6.   

    java从理论上来说不会存在内存泄露的问题,因为java是自动内存回收机制,java的程序的编写者无法对内存进行控制.你把一个对象的引用改成null也不等于消灭对象了,只是说明那个对象没有引用了,但是它仍旧存在在内存中,不过java虚拟机自身会对无引用的对象自动回收。但是这个自动回收是不知道什么时候执行的。就算你调用system.gc的方法,垃圾对象也不会立即回收掉,这个方法也只是告诉虚拟机,尽可能快地执行垃圾回收,回收掉垃圾对象。
      

  7.   

    我的一个web系统老是报内存溢出,估计是程序那里出问题了
    估计是我的数据库链接池的问题,我自己写了个数据库链接池类,
    估计里面有些资源没有释放!
    哪里有比较好的免费的性能监控软件,我想跟踪下内存使用情况 ?
      

  8.   

    一般除了数据库连接,文件的reader,writer等应该不需要特别的处理吧.
      

  9.   

    我想是其他问题,java内存好少会出现泄漏得
      

  10.   

    比如 你的Vector有9个元素,这时可能你的Vector的内部的capacity是16
    这可能导致其他的五个元素不能被回收,所以,可以在适当的地方调用trimToSize()