Issue #4990 has been reported by Kurt  Stephens.

----------------------------------------
Feature #4990: Proposal: Internal GC/memory subsystem API
http://redmine.ruby-lang.org/issues/4990

Author: Kurt  Stephens
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 


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:

1) 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)

2) Support selecting GC implementations at run-time or compile time.

3) Support malloc() replacements, at run-time and/or compile time, such as:
  * tcmalloc
  * jemalloc

4) 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.

5) 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.




-- 
http://redmine.ruby-lang.org