Issue #4990 has been updated by authorNari (Narihiro Nakamura).

Status changed from Assigned to Closed

Hi. I'm sorry to late reply. Could you make more small proposal? It's difficult to introduce big feature at once.
----------------------------------------
Feature #4990: Proposal: Internal GC/memory subsystem API
https://bugs.ruby-lang.org/issues/4990#change-43073

Author: kstephens (Kurt  Stephens)
Status: Closed
Priority: Normal
Assignee: authorNari (Narihiro Nakamura)
Category: 
Target version: next minor


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://bugs.ruby-lang.org/