跳到内容

鹦鹉虚拟机/内存和垃圾回收

来自维基教科书,开放的书本,开放的世界

竞技场和池

[编辑 | 编辑源代码]

鹦鹉在称为竞技场的大块中分配内存。每个竞技场都有足够的空间来容纳大小为 M 的 N 个项目,通常紧密地打包在一起在连续的内存位置。一些收集器也可能在竞技场中存储额外的元数据。相同类型的多个竞技场作为链接列表存储在中。一个池可能没有竞技场,一个竞技场或多个竞技场,但给定池中的竞技场都包含相同大小的对象。但是,每个竞技场可以容纳不同数量的对象。

鹦鹉解释器结构(它维护整个虚拟机的状态)包含指向arena_base结构的指针。竞技场基本结构包含指向所有不同池的指针,以及用于内存管理的几个其他重要数据项。

垃圾收集器

[编辑 | 编辑源代码]

鹦鹉有许多可用的垃圾收集器,可以在编译时使用编译器指令选择。目前最成熟和最健壮的收集器是简单的标记和清除收集器 GC_MS。不同的收集器可以在编译之前在文件include/Parrot/settings.h中激活或停用。该文件包含许多可以设置的选项,以自定义鹦鹉的行为。

标记和清除收集器

[编辑 | 编辑源代码]

标记和清除(MS)收集器是鹦鹉中唯一一个目前足够成熟和稳定以供定期使用的收集器。但是,此收集器是鹦鹉中几个性能问题的原因,并且正在积极努力将其替换。在 1.0.0 版本中,标记和清除收集器可能会被弃用或从鹦鹉中完全删除。

增量三色收集器

[编辑 | 编辑源代码]

目前正在开发一种新的垃圾收集方案,它使用三色标记算法来标记数据对象。三色算法将使收集器能够实现增量行为,从而避免 MS 收集器对大型内存池的“停止世界”行为。

编写新的收集器

[编辑 | 编辑源代码]

编写新的收集器就像实现特定的接口一样简单。此接口在 PDD 09 中有详细定义,但我们将在这里介绍一些基本知识。

Arena_base 和函数指针

[编辑 | 编辑源代码]

池和函数指针

[编辑 | 编辑源代码]

写屏障

[编辑 | 编辑源代码]


上一个 鹦鹉虚拟机 下一个
PMC 系统 IO 子系统
华夏公益教科书