单例模式引起的内存泄漏

引起内存泄漏的原因有很多种,归结到最后都是由于GC不能回收对应的对象导致。

今天主要说明单例模式一种情况下引起的内存泄漏,这类问题引起的内存泄漏,也可以归纳为:长生命周期对象持有短生命周期对象,导致短生命周期对象不能回收


首先介绍一下内存泄漏和内存溢出的区别,内存泄漏和内存溢出是两码事,内存溢出是由于应用所消耗的内存或者应用申请的内存超出了虚拟机分配的内存,也就是内存不够用了。内存泄漏是某个不再使用对象由于被其他实例引用,导致不能被GC回收,而导致的内存不能释放。内存泄漏可能会引起内存溢出,因为如果内存泄漏严重,导致存在大量GC不能 回收的对象占用内存,内存占用会越来越高,导致其他对象不能被分配到内存,从而导致内存溢出。

今天讲解的是单例模式引起的内存泄漏。在项目开发过程当中,我们为了保证某个类的对象唯一性,可能会使用单例模式,单例模式可以保证在该进程下,该类的最多只存在一个实例对象,也可能一个也不存在(没调用)。

首先看一下我们测试代码的结构:

一个主界面MainActivity里面有一个按钮,点击进入SecondActivity,SecondActivity中有一个按钮点击进入LastActivity。

首先看一下单例模式代码

package com.example.wei.memory;import android.content.Context;
import android.util.Log;public class SingleInstance {private Context mContext;private static SingleInstance instance;private SingleInstance(Context context) {this.mContext = context;}public static SingleInstance getInstance(Context context) {if (instance == null) {instance = new SingleInstance(context);}return instance;}public void say() {Log.i("tag", "this is single instance");Log.i("tag", ":code:" + instance.hashCode());}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部