Actions
Feature #4990
closedProposal: Internal GC/memory subsystem API
Feature #4990:
Proposal: Internal GC/memory subsystem API
Description
There is significant interest in improving/altering the performance, behavior and features of MRI's GC in 1.8 and 1.9 series.
Proposal: MRI should support an internal GC API -- to separate MRI core from its current GC implementation,
and provide hooks for additional features:
- Interfaces between MRI internals and any GC/allocator implementation:
- stock MRI GC
- malloc() without free() to support valgrind testing (or short-lived programs)
- variants of stock MRI GC (http://engineering.twitter.com/2011/03/building-faster-ruby-garbage-collector.html and REE)
- BDW (http://www.hpl.hp.com/personal/Hans_Boehm/gc/)
- other collectors (https://github.com/kstephens/smal)
-
Support selecting GC implementations at run-time or compile time.
-
Support malloc() replacements, at run-time and/or compile time, such as:
- tcmalloc
- jemalloc
- Support callback hooks in allocation and GC phases to orthogonally add features, such as:
- performant/correct WeakReferences and ReferenceQueues (http://redmine.ruby-lang.org/issues/4168).
- allocation tracing/debugging.
- instance caching (e.g.: Floats)
- computational caching.
- cache invalidation.
- metrics collection.
- Interfaces to common features of alternate GCs:
- finalization
- weak references
- atomic allocations (e.g.: string or binary data)
- mostly read-only/static allocations (e.g.: code, global bindings)
A prototype GC phase callback API for 1.8, REE and 1.9 is here:
https://github.com/kstephens/ref/tree/master-mri-gc_api/patch
This GC API should be supported on both 1.8 and 1.9 code lines.
Actions