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

相关推荐
奋斗的小乌龟7 小时前
动态创建Agent02
java
吃好睡好便好7 小时前
用while循环语句求和
开发语言·学习·算法·matlab·信息可视化
ZFSS7 小时前
Localization Translate API 集成与使用指南
java·服务器·数据库·人工智能·mysql·ai编程
TechWayfarer7 小时前
查询IP所在地的3种方案:从API到离线库,风控场景怎么选?
开发语言·网络·python·网络协议·tcp/ip
摇滚侠7 小时前
Java 零基础全套教程,集合框架,笔记 153-163
java·开发语言·笔记
nannan12327 小时前
后端技术栈梳理
java
程序员榴莲8 小时前
Python 单例模式
开发语言·python·单例模式
L、2188 小时前
CANN算子开发调试实战:从“Segmentation Fault“到定位根因的完整流程
java·开发语言
狗凯之家源码网8 小时前
基于PHP的多语言跨境电商B2B2C商城系统技术解析
开发语言·php
索木木9 小时前
NCCL SHARP 和 TREE算法
java·服务器·算法