一、内存管理机制概述
1.分配机制 :操作系统会为每一个进程分配一个合理的内存大小,从而保证每一个进程能正常的运行。而不至于内存不够使用,或者每个进程占用太多的内存。
2.回收机制 :在系统内存不足的时候,会有一个合理的回收而再分配内存资源的一个机制,从而保证新的进程能够正常运行。回收的时候就要杀死那些正在占有内存的进程。
二、Android内存管理机制
1.分配机制 :采用弹性的机制,一开始不会为app分配太多的内存,而是给每一个app进程分配一个小额的量,这个小额的量是由硬件RAM尺寸大小来决定的,随着app不断地运行,当app的内存不够使用,Android会为每一个进程分配额外的内存大小。
2.回收机制 :当前内存不够的时候,Android会杀死其他的进程,回收足够的内存,从而开启新进程。回收的时候会按照进程的优先级,并按照LRU(最近最久未使用)机制回收内存。
三、内存管理机制的特点
1.更少的占用内存。
2.在合适的时候,合理的释放系统资源。
3.在系统内存紧张的情况下,能释放大部分不重要的资源,来为Android系统提供可用的内存。
4.能够很合理的在特殊生命周期中,保存或者还原重要数据,以至于系统能够正确的重新恢复该应用。
四、内存优化方法
1.当Service完成任务之后,尽量停止它。Service是运行在主线程的不能做耗时操作,需要手动退出;而IntentService是运行在子线程的,可以进行耗时操作,并会自动退出。
2.当UI不可见的时候,释放掉一些只有UI使用的资源。
3.在系统内存紧张的时候,尽可能多的释放掉一些非重要资源。
4.避免滥用Bitmap导致的内存浪费。
5.使用针对内存优化过的数据容器,比如使用HashArray替代HashMap。
6.避免使用依赖注入框架。
7.使用zip对齐的apk。
8.使用多进程,把长期运行在后台的模块移入到单独的进程中。
五、内存溢出VS内存泄漏
1.内存溢出 :当前占用的内存加上申请的内存资源超过了Dalvik虚拟机的最大内存限制就会抛出的Out of memory异常。
2.内存泄漏 :应该被回收的对象没有被回收,被其他的类或实例引用,造成GC无法回收。