Understanding ROS Memory Allocator in ART Virtual Machine
Agenda 1. Run 基本结构 2. 主要算法 a) Allocate b) Free 正文 ROS memory allocator 是 Android ART virtual machine 中 GC 的一个内存分配器。 ROS 是 Run-of-Slots 的缩写。 在 ROS allocator 中,分配的都是虚拟地址区间(具体的物理内存什么时候分配是由 kernel 中的 page fault 来负责的)。 ROS allocator 的基本分配单元是 slot 。 slot大小 从 16Bytes 到 2048Bytes ,分别是 16,32,48,… n*16,512,1024,2048. 不同大小的 slot 对应不同种类的 Run ,换句话说,一种 Run 提供大小相同的 slot. 一共有 34 种 Run. 一 , Run 的基本结构 一个 Run, 可以分为两大部分,分别是 Run header 和 Data Area 。如下所示: Run header 里面包含了 ∙ Magic number: Debug 相关 ∙ Size_bracket_idx_: 表示了该 Run 中的 slot 的 size 是多大。比如 Size_bracket_idx_ 是 10 ,那么该 Run 中的 slot 的 size 是( 10+1 ) *16=176 Bytes. ∙ Is_thread_local: 表示了该 Run 是否是 Thread local area. ROS allocator 规定每个线程都会持有一组 Thread local Ru...