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

相关推荐
小成202303202656 小时前
Linux高级02
linux·开发语言
camellias_6 小时前
【无标题】
java·tomcat
知行合一。。。6 小时前
Python--04--数据容器(总结)
开发语言·python
咸鱼2.06 小时前
【java入门到放弃】需要背诵
java·开发语言
ZK_H6 小时前
嵌入式c语言——关键字其6
c语言·开发语言·计算机网络·面试·职场和发展
A.A呐6 小时前
【C++第二十九章】IO流
开发语言·c++
椰猫子6 小时前
Java:异常(exception)
java·开发语言
lifewange6 小时前
pytest-类中测试方法、多文件批量执行
开发语言·python·pytest
cmpxr_7 小时前
【C】原码和补码以及环形坐标取模算法
c语言·开发语言·算法
2401_827499997 小时前
python项目实战09-AI智能伴侣(ai_partner_5-6)
开发语言·python