[squeak-dev] Re: Weak collection changes

Andreas Raab andreas.raab at gmx.de
Thu Feb 4 04:43:04 UTC 2010


Levente Uzonyi wrote:
> I uploaded a new version of the Collections package to the Inbox 
> (Collections-ul.295) for reviewing.

Looks good to me. The one thing I'm wondering about is whether 
WeakKeyDictionary shouldn't initialize its finalizer by default to 
something like [:item| item finalize]?

Cheers,
   - Andreas

> If contains the following changes:
> 
> WeakSet:
> - new grow strategy implemented via #growSize (it can actually shrink if
>   too many elements are garbageCollected)
> - semantic change: #slowSize doesn't change (decrease) the value of tally
>   so it doesn't supress growing
> - #fixCollisionsFrom: recycles free slots
> 
> WeakKeyDictionary:
> - new finalization strategy: push model instead of pull (via finalizer)
> - new instance variable named finalizer. If it's value is not nil, then it
>   will be evaluated with the finalized associations' value
> - #fixCollisionsFrom: finalizes values and recycles free slots, instead of
>   rehashing (this boosts performance)
> - new method: #slowSize which counts only those associations which have a
>   not nil key
> - new grow stategy (same as WeakSet's)
> - #finalizeValues: is deprecated
> - #noCheckNoGrowFillFrom: (used by #grow and #rehash) finalizes values via
>   finalizer if it's not nil
> - cosmetic changes
> 
> WeakRegistry:
> - new instance variable named objectsToFinalize, it's value is nil or
>   an OrderedCollection which collects the executors of garbage collected
>   objects. Access to objectsToFinalize always protected.
> - new finalization strategy uses the finalizing capability of
>   WeakKeyDictionary. WeakRegistry adds a finalizer block to its
>   WeakKeyDictionary which adds the received object to objectsToFinalize
> - #finalizeValues, #remove:ifAbsent: simplified
> - #finalizeValues has O(size) runtime worst case
> - cosmetic changes
> 
> +a postscript for installing the finalizer blocks
> 
> Passes all tests in WeakRegistryTest.
> 
> 
> It can be loaded to clean Trunk images (tested in 8972), but it has to 
> be splitted (or tweaked) if we decide to add these to the trunk. Also 
> further minor changes are on the way.
> 
> 
> Cheers,
> Levente
> 
> 




More information about the Squeak-dev mailing list