在Java开发中,为了获得引用方便,我们的开发同学经常使用单例模式。该模式本身不会引起内存泄漏,但是如果和其它实例配合时候使用不当则会引起很大的隐患。究其原因在于单例模式中必然出现sInstance类的静态成员变量来保存单例的实例。但是如果该单例有成员变量保存了其它实例的引用如:
publicclass MyInstance {
privatestatic sIntance;
private Listener mL;
public MyInstance getInstance() {
if (null == sInstance)
sInstance = new MyInstance();
return sInstance;
}
publicvoidsetListener(Listener l) {
mL = l;
}
}
则会构成引用链 VMRoot -〉sIntance -〉mL -〉your listener instance
从而会造成你的listener在sInstance不被置null的情况下永远不会被垃圾收集,所以最好不要在单例模式中保存其它实例的引用,如果非要使用,也要采用SoftReference的方式。单例模式如果混用了observer模式,恭喜你,操作不当你可能会中内存泄漏的大奖,一大波实例将无法回收.因为你很可能让你的view实现Listener接口或者使用了内部类,这样将导致StrongRef-〉listener-〉view-〉Activity一大串无法释放。
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('').text(i)); }; $numbering.fadeIn(1700); }); });