[plt-scheme] Weak hash tables
At Thu, 9 Sep 2004 10:06:24 -0700, Don Felgar wrote:
> I presume this is an artifact of conservative gc.
More or less. Try
(define wht (make-hash-table 'weak))
(define strong "bar")
(hash-table-put! wht 'strong strong)
(let loop ()
(hash-table-put! wht (string->symbol (number->string (random 5000000)))
"value")
(collect-garbage)
(printf "~a~n" (hash-table-count wht))
(loop)))
> I wrote the above test to determine if a weak hash table shrinks
> during gc, as opposed to accumulating k/v pairs with a #f value.
It shrinks.
(Actually, internally, it merely avoids growing. If you put 5000 things
into a weak hash table and they all go away, then you're left with 5000
buckets internally, while `hash-table-count' claims 0. If you put 200
things back in, 200 buckets get recycled, but you're still stuck with
4800 empty buckets.)
Matthew