内存泄漏那些事

简介: 内存泄漏那些事

最近在做内存优化方面的需求,总结出了一些常见的问题,之后会一直更新并记录,希望读者也可以进行补充,在评论区可进行补充~~

定义

定义:程序分配的堆内存中由于某种原因造成无法及时释放某些对象,造成内存泄漏,内存泄漏多了就容易造成内存溢出

哪些情况会出现内存泄漏

1.集合

造成内存泄漏的原因:集合释放掉了,但时集合中还持有某些对象的引用,造成这些引用不能被及时回收

解决方法:持有的对象引用和自身都需要释放资源

2. 匿名内部类|非静态内部类

造成内存泄漏的原因:默认情况下非静态内部类持有外部类对象的引用,当程序退出的时候,无法及时释放掉外部类对象的引用,所有造成内存泄漏

解决办法:改成有名的静态内部类(静态内部类不持有外部类对象的引用)

3.Handler

造成内存泄漏的原因:默认情况下非静态内部类持有外部类对象的引用,当程序退出的时候,无法及时释放掉外部类对象的引用,所有造成内存泄漏

解决办法:改成有名的静态内部类(静态内部类不持有外部类对象的引用)

4.MVP容易内存泄漏

造成内存泄漏的原因:因为P层持有V层对象引用,当V层退出销毁的时候,1.P层有可能还在向M层进行数据请求,

2.P层还持有V层对象引用,所以造成V层对象不能被及时回收,就造成了内存泄漏

解决方法::当V层退出销毁时候,断开所有的网络请求问题2:P层生命周期和V层生命周期关联;让P层持有V层的弱引用

5.线程容易出现内存泄漏

造成内存泄漏的原因:1. 线程持有V层引用不能被及时回收2.Activity已经销毁但是线程没有执行完run方法还会持有V层引用造成V层引用没有及时回收

解决方法:首先将线程变成静态内部类,设一个boolean类型的标志,并通过设置这个标志为true或false决定run方法中的语句是否执行,run方法执行完线程就会关闭

6.Context容易出现内存泄漏

造成内存泄漏的原因:因为单例的静态特性使得单例的生命周期和应用的生命周期一样长, 当这Activity退出时,Activity应该被回收, 但是单例中又持有它的引用,导致Activity回收失败,造成内存泄漏

解决方法:不管外面传入什么Context,最终都会使用Applicaton的Context,而我们单例的生命周期和应用的一样长,这样就防止了内存泄漏。

7.IO流,数据库未及时关闭

内存泄漏的原因:流一直开着会占用缓存区的内存空间,如果不关闭,就会一致占用

解决方法流close,数据库及时关闭

8.WebView容易出现内存泄漏

内存泄漏的原因页里面对象持有webview对象的引用,当程序退出的时候 无法及时释放webview对象,

如果webview持有外部Activity对象引用的话,程序退出的时候 也无法释放activity对象引用

解决方法

1.webview的生命周期和application生命周期一致

2. 在Activity退出的时候在onDestory里面

3.让 WebView 加载null内容,然后移除 WebView,再销毁 WebView,最后置空。


相关文章
|
存储 数据采集 大数据
大数据必知必会系列——数仓分层架构及三层架构流程[新星计划]
大数据必知必会系列——数仓分层架构及三层架构流程[新星计划]
2200 0
|
1天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
11天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
5天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
449 192
|
3天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。
|
9天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。

热门文章

最新文章