前言
内存溢出系列文章
内存溢出系列文章(一) - 内存溢出定义及原因
内存溢出系列文章(二) - 避免内存溢出及优化
1. 内存的定义
内存指手机的RAM,包括寄存器和栈;
寄存器:存储速度最快;位于处理器内部,在程序中我们无法控制;
栈:存储基本类型的对象和引用,对象存放在堆中;
2. Android中沙盒机制
Android是建立在Linux系统之上,Android中每一个应用相当于一个Linux中的用户,他们相互独立,不能共享和访问,所以每一个应用只能通过进程之间的通信,沙盒机制保证了各个应用的安全,使得每一个应用所分配的内存大小是有限的;
3. OOM的定义
OOM,即就是内存溢出,也就是说app内存超过了VM所分配的最大,导致app异常崩溃。
4. OOM产生原因
OOM一般发生在需要大量内存情况下,因为Android每一个应用都是一个Davlik虚拟机,该虚拟机的默认堆内存只有16M,容易OOM,主要原因有以下几个:
1>:加载大图片或者大量的图片,因为图片特别耗费内存;
2>:大量的内存泄露导致内存溢出;
3>:操作数据库完后cursor没有调用close关闭;file、io流用完之后没有释放;
其实导致OOM内存溢出最主要的原因还是:加载大图或者加载大量的图片,后边2种其实是一种编码规范,可以用来约束程序员。
一般一个应用的内存不会超过16M、24M、32M不等,当应用所需要的内存超过这个值时,就会导致OOM内存溢出。