内存管理机制概述:
- 分配机制:操作系统会为每一个进程分配一个合理的内存大小,从而保证每一个进程能够正常的运行,不至于内存不够使用,或者某个进程占用过多的内存。
- 回收机制:在系统内存不足的时候,系统有一个合理再分配资源的一个机制,从而保证新的进程能够正常运行,回收的时候就要杀死那些正在占用内存的进程,而Android系统也有一套自己的回收机制。
Android内存管理机制:
- 分配机制:Android在为每个进程分配内存的时候采用了弹性的分配方式,一开始不会为APP分配太多的内存,而是开始只是分配一个小额的量,而这个量是根据手机物理内存的量而动态调整的,随着APP不断的运行当发现内存不够用了则android会为其分配一个额外的内存大小,但是这个额外的内存大小不是随意分配的,是有大小限制的,而Android的最大限度就是让更多的进程存活的内存当中,这样的话当用户再一次启动该APP进程时不需要重新创建进程,这时只要恢复已有的进程就可以了,减少APP启动的时间提高了用户体验。
- 回收机制:由于Android是尽可能的让进程都存活以提高用户体验,当内存不足的时候,则会按一定的规则去杀掉APP以释放内存,则会按进程的优先级进来回收。
内存管理机制的特点:
- 更少的占用内存。
- 在合适的时候,合理的释放系统资源,并非内存越少APP越好,因为内存抖动也会影响APP性能。
- 在系统内存紧张的情况下,能释放掉大部分不重要的资源,来为Android系统提供可用的内存。
- 能够很合理的在特殊生命周期中,保存或者还原重要数据,以至于系统能够正确的重新恢复该应用。
内存优化方法:
- 当Service完成任务后,尽量停止它,可以采用IntentService。
- 在UI不可见的时候,释放掉一些只有UI使用的资源。
- 在系统内存紧张的时候,尽可能多的释放掉一些非重要资源。
- 避免滥用BitMap导致的内存浪费。
- 使用针对内存优化过的数据容器。
- 避免使用依赖注入的框架。
- 使用ZIP对齐的APK。IDE已经集成了
- 使用多进程。
内存溢出 vs 内存泄漏:
内存溢出会出现OOM异常,而内存泄漏不一定会抛异常,但是它是造成OOM的主要原因。