Android的内存管理方式
- Android系统内存分配与回收方式
- 一个APP通常就是一个进程对应一个虚拟机
- GC只在Heap剩余空间不够时才去垃圾回收
- GC触发时,所有线程都会被暂停!!!
- APP内存限制机制
- 每个App分配的最大内存限制,随设备不同而不同
- 吃内存大户:图片
- 为什么要限制?
- 切换应用时后台APP清理机制
- APP切换时的LRU Cache
- LRU算法:最近使用的排在最前面,最少的可能被清理掉
- GC时,清理时会执行onTrimMemory()回调方法
- APP切换时的LRU Cache
Android系统内存分配与回收方式
adb shell : 进入Android底层Linux系统命令;
ps :查看系统里面进程的命令;
dumpsys meminfo com.xxx.xxx :查看进程的相关信息
APP内存优化方法
- 数据结构
- 频繁字符串拼接用StringBuilder
- ArrayMap、SpareArray替换HashMap
- 内存抖动
- 再小的Class耗费0.5KB
- HashMap一个Entry需要额外占用的32KB
- 对象复用
- 复用系统自带的资源
- ListView/GridView的convertView复用
- 避免在onDraw()方法里面执行对象的创建
- 避免内存泄漏
- 由于代码瑕疵,导致这块内存,虽然是停止不用了,但依然被其他东西引用着,导致GC无法回收它
- 内存泄漏会导致剩余可用Heap越来越少,频繁触发GC