一、前言
不管是以前的手机只有 256 M的内存时代,还是现在已经 8G 都快成普及的时代,内存优化一直以来都是开发过程中的一个难题。内存的泄漏以及不合理使用,直接带来的负面影响就是 APP 显得卡顿了,甚至最后造成 APP 在内存上出现 OOM 而导致的崩溃问题。
二、内存优化的常见问题
内存的问题繁多,但总结以及归纳出来,比较突出的可能就是这么几个点:内存泄漏、频繁GC,造成卡顿、新版本总体稳定增长、内存碎片。详见下图的描述。
三、内存泄漏
可能我们都知道什么是内存泄漏,但也不妨再看看关于内存泄漏的具体定义。以下先来看看《维基百科》对于内存泄漏的专业解释。
在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。
-- 摘自《维基百科》
而在 Android 中,我们讲内存泄漏,主要是指针对 Java 层的内存泄漏。Java 有自己的垃圾回收机制,理论上来说不需要我们关注内存的分配与回收。但有一些资源或者说就是对象,在使用过程中由于长时间被其他对象所引用,导致其得不到回收而一直占用着内存,从而引起了相对某个生命周期而言的内存泄漏。
以下是 Android 中常见的内存泄漏问题。
通过上图,可以看出,Android 中常见的内存泄漏基本都是由于长期持有 Activity 或者 某个组件的 Context 从而导致的内存泄漏。相应的常见解决方案如下。