黑马程序员技术交流社区

标题: java中存在内存泄露吗? [打印本页]

作者: 黑马-zhangping    时间: 2012-10-25 18:53
标题: java中存在内存泄露吗?
java中存在内存泄露吗?
作者: 鲁中需    时间: 2012-10-25 19:01
java虽有垃圾回收机制,但若不注意,还是会有内存泄露的情况发生:
      java中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中可能出现内存泄露的情况,例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一个全局map对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。检查java中的内存泄露,一定要让程序将各种分支情况都完整执行到程序结束,然后看某个对象是否被使用过,如果没有,则才能判定这个对象属于内存泄露。
     如果一个外部类的实例对象的方法返回了一个内部类的实例对象,这个内部类对象被长期引用了,即使那个外部类实例对象不再被使用,但由于内部类持久外部类的实例对象,这个外部类对象将不会被垃圾回收,这也会造成内存泄露。
作者: 范贞亮    时间: 2012-10-25 19:10
总结楼上都说的话就是:看张老师的《Java 面试宝典》
作者: 赵红萍    时间: 2012-10-25 19:31
当然会有,比如你用FileInputStream创建了一个对象fis,此对象用于读取一个文件,当文件读取完了以后,一定要记得fis.close(),这是在关闭你打开过的资源,java中垃圾回收器只是回收那些不再使用的对象,如果你忘了关闭资源,那么等到fis对象被回收以后,你打开过的资源就一直占着内存,造成内存泄露.
作者: 刘丽娜    时间: 2012-10-25 21:17
会有的 因为很多没用的对象如果没有被回收的话就可能内存泄露的 只是一点




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2