Skip to content

Implement canonical reference counting plan and RCImmix #783

Open
@wks

Description

@wks

TL;DR: We need to port the RC and RCImmix plans from JikesRVM.

The algorithms

Reference counting is one of the basic canonical GC algorithms alongside MarkSweep, MarkCompact, and Semispace. The notable difference is its use of reference counting instead of tracing as the way to identify garbage. We need to include RC as well for completeness.

Here we list the algorithms we need to port to the Rust version of mmtk-core, and their characteristics:

  • RC
    • Based on the RC plan in JikesRVM MMTk.
      • Use the same free-list allocator as MarkSweep
      • Primarily use RC, but also use back-up tracing.
      • Use deferral
      • Use coalescing
    • Apply optimisations introduced by Shahriyar et al. in ISMM'12
      • Limit the reference count bits.
      • Lazy mod-buf insertion.
      • Objects are allocated dead.
  • RCImmix (Shahriyar et al. in OOPSLA'13)
    • Use the Immix allocator
    • Maintain a live-object counter for each Immix line
    • Move objects (1) when a young object survived a GC, and (2) when doing full-heap backup tracing

Related work

The LXR GC algorithm is based on RCImmix. The code is in a separate branch, but is not merged yet.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-gc-algorithmArea: GC algorithmC-featureCategory: FeatureF-projectCall For Participation: Student projects. These issues are available student projects.P-normalPriority: Normal.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions