GC(全称 Garbage Collection),即垃圾回收。在计算机领域,GC就是找到内存中的垃圾,释放和回收内存空间。当前主流编程语言实现的GC算法主要分为两大类:引用计数和对象追踪(即Tracing GC)。ArkTS运行时中就是基于分代模型和混合算法来实现不同场景下内存回收的高性能表现。
在ArkTS中,数据类型分为两类,简单类型和引用类型。简单类型内容直接保存在栈(Stack)中,由操作系统自动分配和释放。引用类型保存在堆(heap)中,需要引擎进行手动释放。GC就是针对堆空间的内存自动回收的管理机制。
Heap结构及其配置参数
Heap结构
- SemiSpace:年轻代(Young Generation),存放新创建出来的对象,存活率低,主要使用copying算法进行内存回收。
- OldSpace:老年代(Old Generation),存放年轻代多次回收仍存活的对象会被复制到该空间,根据场景混合多种算法进行内存回收。
- HugeObjectSpace:大对象空间,使用单独的region存放一个大对象的空间。
- ReadOnlySpace:只读空间,存放运行期间的只读数据。
- NonMovableSpace:不可移动空间,存放不可移动的对象。
- SnapshotSpace:快照空间,转储堆快照时使用的空间。
- MachineCodeSpace:机器码空间,存放程序机器码。
注:每个空间会有一个或多个region进行分区域管理,region是空间向内存分配器申请的单位。
相关参数
注意
以下参数未提示可配置的均为不可配置项,由系统自行设定。
以下参数值有多个阶段划分的对应heap总大小64MB-128MB/128MB-256MB/大于256MB三个阶段的范围情况,剩余内存空间充足的情况下默认均为第三段大于256MB情况。
Semi Space
heap中会生成两个Semi Space供copying使用。
参数名称 | 范围 | 作用 |
---|---|---|
semiSpaceSize | 2MB-4MB/2MB-8MB/2MB-16MB | semispace空间大小,会根据堆总大小有不同的范围限制 |
semiSpaceTriggerConcurrentMark | 1M/1.5M/1.5M | 首次单独触发Semi Space的并发mark的界限值,超过该值则触发 |
semiSpaceStepOvershootSize | 2MB | 允许过冲最大大小 |
其他空间
参数名称 | 范围 | 作用 |
---|---|---|
defaultReadOnlySpaceSize | 256 KB | ReadOnlySpace默认空间大小 |
defaultNonMovableSpaceSize | 2 MB/6 MB/64 MB | NonMovableSpace默认空间大小 |
defaultSnapshotSpaceSize | 512 KB/512 KB/ 4 MB | SnapshotSpace默认空间大小 |
defaultMachineCodeSpaceSize | 2 MB/2 MB/8 MB | MachineCodeSpace默认空间大小 |
Old Space 和 Huge Object Space
初始化时都设定为Heap剩余未分配空间的大小。
参数名称 | 范围 | 作用 |
---|---|---|
oldSpaceOvershootSize | 4MB/8MB/8MB | oldSpace允许过冲最大大小 |