MMTk provides language implementers with a memory management library and the memory management research community with a toolkit for memory management research within multiple languages and compelling language runtime implementations.

MMTk was originally implemented in Java by Steve Blackburn, Perry Cheng and Kathryn McKinley as a part of the Jikes RVM research virtual machine.

MMTk Re-Write

We have completely re-written MMTk from scratch. The re-write had two high-level objectives: a) implement the toolkit in a language that was not tightly coupled with a single runtime and its infrastructure, and b) implement the toolkit in a way that ensured that it could be runtime-agnostic, allowing it to be used with multiple language runtimes. The re-write has been done by a group from the Australian National University led by one of the original MMTk authors (Steve Blackburn). Members of the team, led by Yi Lin, ran a successful pilot study of the viability of Rust as an implementation language for high performance garbage collection, which was written up and published at ISMM’16.


The original implementation was integrated into Jikes RVM in October 2002, and was written up in publications at ICSE’04 and SIGMETRICS’04. The toolkit evolved over time, adding garbage collectors, including many of the seminal algorithms from the literature as well as novel algorithms that were developed within MMTk. In its early days, MMTk was ported to Rotor, an open-source fork of the .NET runtime, but the effort was limited by Rotor lacking many of the performance-critical elements of .NET. MMTk was also the basis for the VMKit project which provided a framework for building managed runtimes. The sources of VMKit remain available via the llvm svn.

A number of novel garbage collectors were developed within MMTk, including Immix, which is used by the Inko and Scala Native runtimes.


When you use MMTk in an academic publication, please cite one of the original papers.

We hope to have more up to date references for MMTk before too long.