单利模式内存泄漏

原创 2016年05月31日 16:48:50

在Java开发中,为了获得引用方便,我们的开发同学经常使用单例模式。该模式本身不会引起内存泄漏,但是如果和其它实例配合时候使用不当则会引起很大的隐患。究其原因在于单例模式中必然出现sInstance类的静态成员变量来保存单例的实例。但是如果该单例有成员变量保存了其它实例的引用如:

public class MyInstance {

private static sIntance;
private Listener mL;

public MyInstance getInstance() {
    if (null == sInstance)
        sInstance = new MyInstance();
    return sInstance;
}

public void setListener(Listener l) {
    mL = l;
}
}

则会构成引用链 VMRoot -〉sIntance -〉mL -〉your listener instance

从而会造成你的listener在sInstance不被置null的情况下永远不会被垃圾收集,所以最好不要在单例模式中保存其它实例的引用,如果非要使用,也要采用SoftReference的方式。单例模式如果混用了observer模式,恭喜你,操作不当你可能会中内存泄漏的大奖,一大波实例将无法回收.因为你很可能让你的view实现Listener接口或者使用了内部类,这样将导致StrongRef-〉listener-〉view-〉Activity一大串无法释放。

相关文章推荐

单例模式可能带来的内存泄漏

单例造成的内存泄漏

由于单例的静态特性使得其生命周期跟应用的生命周期一样长,所以如果使用不恰当的话,很容易造成内存泄漏。比如下面一个典型的例子,public class AppManager { private...

理解并解决IE的内存泄漏模式

转载:http://damoqiongqiu.iteye.com/blog/794468 IE设计模式脚本Web应用服务器 Web开发者的进化       过去,内存溢出并没有给Web开发...
  • xyun52
  • xyun52
  • 2011年08月31日 09:06
  • 386

理解和解决IE的内存泄漏模式

http://msdn.microsoft.com/zh-cn/library/bb250448%28v=VS.85%29.aspx。这篇文章是在解决IE内存泄漏问题方面极为重要的一篇文章,可惜一直没...
  • yaaron
  • yaaron
  • 2011年09月28日 21:57
  • 331

Android开发:浅谈MVP模式应用与内存泄漏

最近博主开始在项目中实践MVP模式,却意外发现内存泄漏比较严重,但却很少人谈到这个问题,促使了本文的发布....

单例模式引起的内存泄漏

引起内存泄漏的原因有很多种,归结到最后都是由于GC不能回收对应的对象导致。 今天主要说明单例模式一种情况下引起的内存泄漏,这类问题引起的内存泄漏,也可以归纳为:长生命周期对象持有短生命周期对象,导致短...

nginx+php-fpm模式php内存泄漏探究

之前遇到过一次服务器内存告警,查看后发现有个php-fpm进程占用了2G的内存。但我明明在php.ini文件里面,有配置 memory_limit = 256M,那为什么会有占用2G内存的php-f...

c++单例模式(线程安全,没有内存泄漏)

我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个publi...

严格模式与内存泄漏,你必须知道的一切

android开发中相同的效果,但是运行起来性能是不一样的,有的app卡到爆,这无疑是是失败的产品,对于一个开发人员来说这是不能容忍的,android在API9引入了StricMode类来检查内存的读...

[android进阶篇]MVP模式优化,防止内存泄漏和空指针问题

主要优化P层V层互相持有对象,不能及时回收/销毁问题 如果你看过我的MVP整合教程【android进阶篇】MVP+Retrofit+RxJava框架结合 你可能就会发现,如果页面在请求的时候,网络不好...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:单利模式内存泄漏
举报原因:
原因补充:

(最多只允许输入30个字)