HarmonyOS Next开发学习手册——内存管理(GC)

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允许过冲最大大小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值