Project

weakling

0.01
No commit activity in last 3 years
No release in over a year
A modified WeakRef impl for JRuby plus some weakref-related tools
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme
weakling: a collection of weakref utilities for Ruby

== Summary ==

This library provides:

* a modified WeakRef implementation for JRuby that supports a reference queue
* a WeakRef::RefQueue class
* a weak-valued ID map to replace typical uses of _id2ref

In the future it may provide additional features like a generic WeakHash or other
reference types like soft and phantom references.

The weakling repository is at http://github.com/headius/weakling.

== Usage ==

Just require 'weakling'. It will require 'weakref' along with the refqueue JRuby
extension and the weakling/collections library containing the weak id hash.

== RefQueue Example ==

require 'weakling'
require 'java'

q = WeakRef::RefQueue.new
wr = WeakRef.new(Object.new, q)
puts "weakref object: #{wr.__id__}"

puts "running GC"
java.lang.System.gc

puts "weakref alive?: #{wr.weakref_alive?}"
puts "weakref object from queue: #{q.poll.__id__}"

== WeakRef::IdHash Example ==

require 'weakling'
 
wh = WeakRef::IdHash.new
 
ary = (1..10).to_a.map {Object.new}
ids = ary.map {|o| wh.add(o)}
 
puts "all items in weak_id_hash:"
ids.each {|i| puts "#{i} = #{wh[i]}"}
 
puts "dereferencing objects"
ary = nil
 
puts "forcing GC"
begin
  require 'java'
  java.lang.System.gc
rescue
  GC.start
end
 
puts "all items in weak id hash:"
ids.each {|i| puts "#{i} = #{wh[i]}"}