文章目录
- 一、内存管理概览
- 二、垃圾回收
- 三、共享内存
- 四、分配与回收应用内存
- 五、限制应用内存
- 六、切换应用
- 七、进程间的内存分配
- 八、内存类型
- 九、物理内存 虚拟内存
- 9.1 物理内存
- 9.2 虚拟内存
- 9.3 虚拟内存的好处
- 9.4 共享库内存
- 十、VSS RSS PSS USS区别
- 十一、Android系统的页面置换
- 11.1 内存页面
- 十二、内存不足管理
- 12.1 内核交换守护进程
- 12.2 低内存终止守护进程
- 12.2.1 onTrimMemory()
- 12.2.2 onLowMemory()
- 十三、计算内存占用量
- 十四、管理应用内存(如何合理使用内存)
- 十五、监控可用内存和内存使用量
- 十六、 释放内存以响应事件
- 十七、应该使用多少内存?
- 十八、使用内存效率更高的代码结构
- 18.1 谨慎使用服务
- 18.2 使用经过优化的数据容器
- 18.3 谨慎对待代码抽象
- 18.4 针对序列化数据使用精简版 Protobuf
- 18.5 避免内存抖动
- 18.6 移除会占用大量内存的资源和库
- 18.7 缩减总体 APK 大小
- 18.9 使用 反射 实现的依赖注入
- 18.10 谨慎使用外部库
一、内存管理概览
Android 运行时(ART)
和 Dalvik 虛拟机
使用分页
和内存映射
来管理内存
。
这意味着应用修改的任何内存,无论修改的方式是分配新对象还是轻触内存映射的页面,都会一直驻留在 RAM
中,并且无法换出。
要从应用中释放内存,只能释放应用保留的对象引用,使内存可供垃圾回收器回收。
这种情况有一个例外:对于任何未经修改的内存映射文件(如代码),如果系统想要在其他位置使用其内存,可将其从 RAM
中换出。
二、垃圾回收
ART
或 Dalvik 虚拟机
之类的受管内存环境会跟踪每次内存分配。
一旦确定程序不再使用某块内存,它就会将该内存重新释放到堆中,无需程序员进行任何干预。
这种回收受管内存环境中的未使用内存的机制称为“垃圾回收"
。
垃圾回收有两个目标:在程席中查找将来无法访问的数据对象,并回收这些对象使用的资源.。
Android 的内存堆是分代的,这意味着它会根据分配对象的预期寿命和大小跟踪不同的分配存储分区。
例如,
最近分配的对象属于“新生代"
。
当某个对象保持活动状态达足够长的时间时,可将其提升为较老代
,
然后是永久代
。