Memory Management ToolKit (MMTk) is a portable and high performance memory manager that includes various garbage collection algorithms and provides clean and efficient interfaces to cooperate with language implementations. MMTk features highly modular and highly reusable designs. It includes components such as allocators, spaces and work packets that GC implementers can choose from to compose their own GC plan easily.
Logically, this crate includes these major parts:
- GC components:
- Allocators: handlers of allocation requests which allocate objects to the bound space.
- Policies: definitions of semantics and behaviors for memory regions. Each space is an instance of a policy, and takes up a unique proportion of the heap.
- Work packets: units of GC work scheduled by the MMTk’s scheduler.
- GC plans: GC algorithms composed from components.
- Heap implementations: the underlying implementations of memory resources that support spaces.
- Scheduler: the MMTk scheduler to allow flexible and parallel execution of GC work.
- Interfaces: bi-directional interfaces between MMTk and language implementations i.e. the memory manager API that allows a language’s memory manager to use MMTk and the VMBinding trait that allows MMTk to call the language implementation.
VM-to-MMTk interface: safe Rust APIs.
GC algorithms from the MMTk suite.
Memory policies that can be used for spaces.
A general scheduler implementation. MMTk uses it to schedule GC-related work.
Utilities used by other modules, including allocators, heap implementation, etc.
MMTk-to-VM interface: the VMBinding trait.
An MMTk instance. MMTk allows mutiple instances to run independently, and each instance gives users a separate heap. Note that multi-instances is not fully supported yet