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销毁时能够被正确回收。

相关推荐
qfljg1 小时前
OpenRewrite 实战指南
java
Sylvia33.1 小时前
LOL实时数据接入深度解析:从WebSocket到完整数据模型
java·网络·python·websocket·网络协议
2601_962071576 小时前
【Java报错已解决】org.springframework.beans.factory.BeanCreationException
java·开发语言
zww89491117 小时前
酒馆预约系统开发实战:从需求分析到上线全流程指南
java·eclipse
淡海水7 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
CS_Zero8 小时前
C语言sizeof是函数吗?
c语言·开发语言
-今昭-9 小时前
《V2V 迁移实战:将 VMware 虚拟机转为 OpenStack 可用 Glance qcow2 镜像》
开发语言·python
zww89491119 小时前
匿名树洞系统开发实战:从需求分析到部署指南
java·eclipse
黑马程序员毕设11 小时前
基于Java的医院药品管理系统的优化设计与实现
java·开发语言·spring boot·小程序·架构·课程设计·毕设
木井巳11 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法