一、内存管理
一个很重要的问题,就是内存是如何进行分配的。如何申请的,如何释放的。
针对于不同的场景,内存是如何分类的。以及,这些分类是对系统产生便利性的。
二、space抽象
1、space实现了设置名字,以及设置回收策略的功能
2、ContinuousSpace begin_ 开始地址,end_结束地址
2、DiscontinuousSpace 的核心在于LargeObjectBitmap上面
3、ContinuousMemMapAllocSpace
关键在于ContinuousSpaceBitmap的定义上面
4、以上为虚拟机的关于内存的一种基本抽象,更为复杂的
zygoteSpace,bumpPointSpace,imageSpace,LargeObjectSpace都是继承自以上几种基本的space的
三、Map抽象
1、mmap的基本原理和分类
在Linux中,我们可以使用mmap用来在进程虚拟内存地址空间中来分配地址空间,创建和物理内存的映射关系。
映射关系可以分为两种:
1、文件映射
磁盘文件映射进程的虚拟地址空间,使用文件内容初始化物理内存
2、匿名映射
初始化全为0的内存空间。这个相当于分配空间了
2、这里讲一点map的知识,是因为虚拟机中space的底层实现。即最终分配空间的实现,是靠mmap来实现的。
四、最新整理的更加全面的内存管理抽象图
1、Space可以理解为数据结构,主要提供的功能是这个
2、AllocSpace提供的主要功能是如何分配对象,释放对象等
3、RosAlloc与DlMalloc、Region应该是三种管理内存的实现方式
慢慢的就能打开art内存管理的神秘面纱