Ruby <2.7now uses WeakMap too, which prevents memory leaks.
Ruby <2.7 does not allow non-finalizable objects to be WeakMap keys: https://bugs.ruby-lang.org/issues/16035 We work around this by using a secondary map for Ruby <2.7 which maps the non-finalizable integer to a distinct object. For now we accept that the entries in the secondary map wil never be collected. If this becomes a problem we can perform a GC pass every so often that looks at the contents of the object cache to decide what can be deleted from the secondary map.
J
Joshua Haberman committed
9879f423ff9f2af8e85ce2f64ef7dc5fe6779c28
Parent: d7e943b