[Gc] weak maps and libgc

Andy Wingo wingo at pobox.com
Wed Oct 26 02:00:04 PDT 2011

Thanks for the thoughts, Ivan!

On Wed 26 Oct 2011 10:18, Ivan Maidanski <ivmai at mail.ru> writes:

> 26 10 2011, 00:06 Andy Wingo <wingo at pobox.com>:
>>  (1) a variant of GC_register_disappearing_link that also
>>      incremented an `unsigned long' somewhere in memory
> You mean statistic counter, right?
> Good idea.

Yes, but ideally one that can be associated with a particular memory
location.  So, collecting a weak reference in collection A would
increment a counter associated with A, but not affect a counter
associated with collection B.

> Is my understanding correct - you want to optimize the following:
> // assume GC_general_register_disappearing_link(&link, obj1);
> ...
> GC_unregister_disappearing_link(&link);
> GC_general_register_disappearing_link(&link, obj2);
> Right? If yes, I don't mind again.

OK, great.  (Embarrassingly, late yesterday I realized that part of my
overhead was caused by terrible flaws in my hash functions, causing
extra collisions and thus reshuffling.  It's not often that you get to
replace a hash function and speed up your program by 25%!)

>>  (3) It would be nice if there were a callback after GC.  It would let
>>      me accurately measure the time in GC, for example.  This isn't
>>      relevant to the current discussion though.
> What's about existing GC_set_start_callback?

That callback is tricky, because you can't do much in it.  But it is
good for starting a timer.  Then you need a GC_set_stop_callback to stop
the timer and record the time spent in GC.

Another thing a GC_set_stop_callback would be useful for would be
statistical profiling of the causes of GC -- just sample the call stack
in the stop callback.  Such a sampler is likely to allocate memory
though and so it's not appropriate for a start callback.



More information about the Gc mailing list