日期:2014-05-18  浏览次数:20545 次

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


------解决方案--------------------
conn.close()是一定要的
但rs與stmt等如不close()就會內存泄漏了
------解决方案--------------------
主动释放或是自动释放
得根据实际情况而定,一般不会出现泄漏问题

------解决方案--------------------
数据库的操作必须要关闭的,什么rs,stmt,conn这些东西一定要关上的

像啥String,vector这些对象一般不用设置成null,JVM的垃圾回收机制会帮你解决的,这又不是C++,不过你非要这么写也可以,你还可以手动的去调用JVM的垃圾回收,System.gc();但不建议去这么做。
------解决方案--------------------
System.gc()是运行垃圾回收的,如果不写java虚拟机就会在空闲的时候自动运行。一般是不需要写的。

------解决方案--------------------
java从理论上来说不会存在内存泄露的问题,因为java是自动内存回收机制,java的程序的编写者无法对内存进行控制.你把一个对象的引用改成null也不等于消灭对象了,只是说明那个对象没有引用了,但是它仍旧存在在内存中,不过java虚拟机自身会对无引用的对象自动回收。但是这个自动回收是不知道什么时候执行的。就算你调用system.gc的方法,垃圾对象也不会立即回收掉,这个方法也只是告诉虚拟机,尽可能快地执行垃圾回收,回收掉垃圾对象。
------解决方案--------------------
一般除了数据库连接,文件的reader,writer等应该不需要特别的处理吧.
------解决方案--------------------
我想是其他问题,java内存好少会出现泄漏得