Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A modified WeakRef impl for JRuby plus some weakref-related tools
Java Ruby
branch: master
Failed to load latest commit information.
examples Add an example of using WeakRef::RefQueue
ext Remove unused import.
nbproject Add specs.
spec Fix a bug where IdHash#[] was still using __getobj__
.gitignore Add NB project files.
HISTORY.txt Set gem platform to java.
LICENSE Add Apache 2.0 license file.
README.txt Minor tweaks, added HISTORY, updated to 0.0.2
Rakefile Add specs.
weakling.gemspec gemspec corrected


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

== 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 =
wr =, q)
puts "weakref object: #{wr.__id__}"

puts "running GC"

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

== WeakRef::IdHash Example ==

require 'weakling'
wh =
ary = (1..10) {}
ids = {|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"
  require 'java'
puts "all items in weak id hash:"
ids.each {|i| puts "#{i} = #{wh[i]}"}
Something went wrong with that request. Please try again.