Skip to content

HTTPS clone URL

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.
lib
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

README.txt

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]}"}
Something went wrong with that request. Please try again.