没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
4页
什么是内存泄漏 长生命周期的对象持有了短生命周期的对象,从而导致短生命周期的对象不能被释放 垃圾回收机制 垃圾回收机制分为:引用计数法、可达性分析法 引用计数法(有循环引用的问题):Python、Object-C、Swift 用一个计数器记录一个对象被引用的次数,如果引用的次数被减少到0,说明这个对象是垃圾对象 可达性分析法:Java JVM通过一些GC Roots向下搜索,如果可以被GC Roots引用到的对象,说明这个对象不是垃圾对象,反之这个对象就是垃圾对象 GC Roots对象 栈中的局部变量 存活的线程对象 JNI的引用 Class对象 引用类型的静态变量 内存泄漏的问题 内存泄漏并
资源详情
资源评论
资源推荐
Android中的内存泄漏中的内存泄漏
什么是内存泄漏什么是内存泄漏
长生命周期的对象持有了短生命周期的对象,从而导致短生命周期的对象不能被释放
垃圾回收机制垃圾回收机制
垃圾回收机制分为:引用计数法、可达性分析法
引用计数法(有循环引用的问题):Python、Object-C、Swift
用一个计数器记录一个对象被引用的次数,如果引用的次数被减少到0,说明这个对象是垃圾对象
可达性分析法:Java
JVM通过一些GC Roots向下搜索,如果可以被GC Roots引用到的对象,说明这个对象不是垃圾对象,反之这个对象就是垃圾
对象
GC Roots对象对象
栈中的局部变量
存活的线程对象
JNI的引用
Class对象
引用类型的静态变量
内存泄漏的问题内存泄漏的问题
内存泄漏并不会马上让程序挂掉。但是随着不能回收的垃圾对象会越来越多,导致可用内存越来越少,到最后应用程序可能在
任何位置抛出OutOfMemoryError
单例模式造成的内存泄漏单例模式造成的内存泄漏
由于单例的特性使得单例的生命周期和应用的生命周期一样长。如果一个对象已经不需要使用了,而单例对象还持有该对象的
引用,那么这个对象将不能被正常回收,导致内存泄漏
下面看例子
public class ActivityManager
{
private Context mContext;
private static ActivityManager manager;
private ActivityManager(Context mContext)
{
this.mContext = mContext;
}
public static ActivityManager getInstance(Context mContext)
{
if (manager!=null)
{
manager = new ActivityManager(mContext);
}
return manager;
}
}
如果传入的是Application的Context没有任何问题,因为单例的生命周期和Application的一样长
如果传入的是Activity的Context,当这个Context对应的Activity退出时,但是单列对象持有当前Activity的引用,导致Activity无
法被回收,从而导致内存泄漏。
正确写法:
public class ActivityManager
Cisco789
- 粉丝: 11
- 资源: 930
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- YOLOV4-TINY权重文件
- 以下是一个使用贪心算法解决多机调度问题的基本步骤0.txt
- 基于大数据的房产估价是近年来随着技术的发展而兴起的一种新型估价方法.txt
- 企业供应链管理系统v3.rar
- 富芮坤FR8016HA蓝牙开发板使用手册+硬件PCB图+封装库+DEMO演示软件源代码.zip
- 基于YOLOv7的芯片表面缺陷检测系统
- 京东物流 数字化供应链综合研究报告2018.rar
- 基于YOLOv7的植物虫害识别&防治系统
- 2000.1-2023.8中国经济政策不确定性指数月度数据.xlsx
- Screenshot_2024-04-21-20-42-15-443_com.tencent.mm.jpg
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0