防止内存泄漏指导文档

1. 概述程序员

 

 防止内存泄漏是一个体系工程,须要从事前预防、事中检测、过后补救三个方面对内存问题进行梳理和处理。算法

 事前预防是指在设计阶段、编码阶段就开展的预防内存泄漏的活动。编程

 设计阶段主要从模块设计、算法构建角度,尽量避免对内存频繁的构建-释放,尽量复用已构建好的对象。缓存

 编码阶段则需注意养成良好的编程习惯,在使用完对象后尽早地显示地释放对象,同时配合代码Review机制,代码Reviewer审核待提交的代码,尽量从中找出问题,而后打回本次提交记录,让代码提交人完善代码后再从新提交,再次进入新一轮的代码Review过程,同时在这不断反复的过程当中,代码提交人对相关代码问题的认识和意识会不断加强,后续再犯此类问题的几率会大为下降。工具

 实践和数据证实,在编码阶段发现和修复问题的数量、难易度、成本是有优点的。在测试阶段、运营阶段发现问题再修复问题的成本是高昂的。测试

 事中检测是指在应用发布上线后,经过在线检测相关的系统信息,提早预判是否有内存问题发生的可能,这是基于一种预测技术的预防机制。优化

 过后补救是指在内存问题发生后,经过问题描述、工具辅助以定位和修复问题。编码

 此外,内存优化是一个持续渐进的过程。spa

 

 

2.事前预防设计

可采用5R原则来指导事前预防的工做,5R内容为:

  • Reckon(估算)

本条原则意为估算应用所需的内存大小在什么量级,以作到知己知彼,在后续使用内存时作到量入为出。

  • Reduce(减小内存分配及使用)

该原则意为使用分配内存时,尽可能少地分配内存空间,好比分配一个循环计数整型变量i,能用short的就不要用int

  • Reuse(重用)

本条原则意为尽可能复用内存,一则可减小内存分配空间,二来可提升程序运行效率,体现该条原则的例子是图片缓存。

  • Recycle(及时回收)

本条原则意为在资源再也不使用时,要尽快释放所占用的资源,体现该条原则的例子是Bitmaprecyclecursorclose

  • Review(代码Review)

提交代码前review下本身的代码,以发现使用不规范的地方,以及代码提交到Gerrit后,其余程序员协助review的过程。

5R原则只是一个指导原则,用以训练程序员养成良好的编程习惯,在编码过程当中,避免常见的内存泄漏类型。


在本项目中,常常出现的的内存泄漏类型以下:

  • Handler泄漏

  • static成员泄漏

  • Callback泄漏

  • Bitmap未即时释放

  • Activity leak window

  • cursor未关闭

在代码Review阶段,可重点留意这些方面的内存问题。

 

 

3.事中监测

借助一种收集系统运行过程产生的信息,动态分析应用是否会产生内存问题的技术,本文档不对这种技术作讨论。

 

 

4.过后补救

      在内存问题发生后,经过现场反馈的信息及内存分析工具的协助,以最终定位问题的过程。

      经常使用内存分析工具备Android MonitorDDMSMAT

相关文章
相关标签/搜索