Java内存泄漏&内存溢出

1.定义

OOM内存溢出是指应用程序尝试使用更多内存资源,而系统无足够的内存,导致程序崩溃。

内存泄漏是指应用程序中分配的内存未能被正确释放,导致系统中的可用内存逐渐减少。

2.内存泄漏的原因

可能包括对象引用未被释放、缓存未被清理等。

以下三种常见情况及其解决措施一一列出:

2.1Thread

当线程持有对某些对象的引用,但这些对象却无法被释放,从而导致内存泄漏。

2.2Handler

由于Handler持有对Activity或Fragment的引用,

当这些Activity或Fragment被销毁时,Handler仍然持有对它们的引用。

2.3Bitmap

1、由于未及时回收Bitmap

2、或者Bitmap持有某些对象的引用未释放

3、频繁创建Bitmap对象

3.解决措施

3.1Thread

确保在不需要时,停止线程并释放对象引用

3.2Handler

使用静态内部类来持有Handler

或者在Activity或Fragment销毁时及时移除Handler

3.3Bitmap

1、使用完Bitmap及时recycle()

2、及时释放不需要的Bitmap对象

3、考虑使用对象池来重复利用Bitmap对象

4、使用SoftReference或WeakReference来持有该对象,内存不足系统自动回收

4.举个例子说明

问题

在MVP架构中,内存泄漏可能发生在Presenter层持有对View层的引用时。

如果Presenter持有对Activity或Fragment的引用,并且Activity或Fragment在被销毁时Presenter没有被正确释放,Presenter将继续存在于内存中,导致Activity无法被正确回收。

办法

1、在Activity或Fragment的生命周期方法(如onDestroy)中及时释放Presenter对象的引用

2、使用弱引用(WeakReference)来持有Presenter对象,以便在Activity或Fragment销毁时能够被正确回收。

相关推荐
麦兜*几秒前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
带刺的坐椅1 分钟前
DamiBus v1.1.0 发布(给单体多模块解耦)
java·事件总线·damibus
葡萄城技术团队2 分钟前
用 Java 构建健壮 REST API 的 4 个关键技巧
java
杨杨杨大侠2 分钟前
解密 atlas-mapper 框架 (9/10):故障排查与调试技巧
java·开源·github
Slaughter信仰4 分钟前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十章知识点问答(10题)
java·jvm·数据库
麦兜*6 分钟前
MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
java·数据库·spring boot·物联网·mongodb·spring
echoarts10 分钟前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
SimonKing11 分钟前
【工具库推荐】Java开发者必备:6款HTTP客户端神器,从经典到未来
java·后端·程序员
树码小子15 分钟前
Java网络编程:(socket API编程:TCP协议的 socket API -- 回显程序的服务器端程序的编写)
java·网络·tcp/ip
Aomnitrix29 分钟前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式