黑马程序员技术交流社区

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

作者: 黑马-郑玉元    时间: 2013-3-13 15:35
标题: java中会存在内存泄露吗?
本帖最后由 黑马-郑玉元 于 2013-3-13 22:42 编辑

java会存在内存泄露吗?什么情况下会出现内存泄露?
作者: 戴乾刚    时间: 2013-3-13 15:52
会。java导致内存泄露的原因很明确:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景。
    1.集合类,集合类仅仅有添加元素的方法,而没有相应的删除机制,导致内存被占用。这一点其实也不明确,这个集合类如果仅仅是局部变量,根本不会造成内存泄露,在方法栈退出后就没有引用了会被jvm正常回收。而如果这个集合类是全局性的变量(比如类中的静态属性,全局性的map等即有静态引用或final一直指向它),那么没有相应的删除机制,很可能导致集合所占用的内存只增不减,因此提供这样的删除机制或者定期清除策略非常必要。
   2.单例模式。不正确使用单例模式是引起内存泄露的一个常见问题,单例对象在被初始化后将在JVM的整个生命周期中存在(以静态变量的方式),如果单例对象持有外部对象的引用,那么这个外部对象将不能被jvm正常回收,导致内存泄露。
作者: 谭辉    时间: 2013-3-13 15:53
本帖最后由 谭辉 于 2013-3-13 16:03 编辑

class A{
    A(){
     this.(4);
     }
  A(int x){
   this();
}

相互调用内存泄露
作者: 黑马-郑玉元    时间: 2013-3-13 15:57
戴乾刚 发表于 2013-3-13 15:52
会。java导致内存泄露的原因很明确:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管 ...

了解了!谢谢!
作者: 黑马-郑玉元    时间: 2013-3-13 15:58
谭辉 发表于 2013-3-13 15:53
==比较的是对象的引用即为引用地址
如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法 ...

貌似你来错地方了!!!




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