[Gc] weak maps and libgc
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_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