On 18.10.2010 23:43, Igor Stasenko wrote:
On 19 October 2010 00:30, Henrik Sperre Johansen <henrik.s.johansen@veloxit.no> wrote:
On 18.10.2010 23:21, Igor Stasenko wrote:
2010/10/19 Levente Uzonyi<leves@elte.hu>:
On Mon, 18 Oct 2010, Nicolas Cellier wrote:
2010/10/18 Igor Stasenko<siguctua@gmail.com>:
On 18 October 2010 23:18, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
2010/10/17 Levente Uzonyi<leves@elte.hu>:
On Sat, 16 Oct 2010, Bart Veenstra wrote:
Hi list,
I have been working with Pharo for almost a month now, and I suspect that the performance is degrading fast. UI tasks takes several seconds to react to my keyboard. That kind of sluggishness is probably related to finalization/gc. Please send us the result of the following expression:
(WeakArray classPool at: #FinalizationDependents) select: [ :each | each notNil ] thenCollect: [ :each | each class -> each size ]
While updating pharo 1.2, after an EndOfCentralDirectory error, I got a very unresponsive image...
((WeakArray classPool at: #FinalizationDependents) as: Array) select: [ :each | each notNil ] thenCollect: [ :each | each class -> each size] -> {(WeakIdentityKeyDictionary->22370). This is an MC cache. And major reason of image slowdown.
Levente did this simplification in trunk:
cachedDefinitions ^definitions ifNil: [ definitions := WeakIdentityKeyDictionary new ]
It would be worth a try in Pharo. IIRC Pharo's WeakKeyDictionary (and subclasses) don't work properly if they're not registered to the finalization process. So this won't work as long as that's not fixed.
Huh? Can you provide a code to show it? Test case please?
Just add lots of objects which will be GC'd to an unregistered WeakKeyDictionary. After X objects are gc'd, you'd still have X nil-keyed associations in the dictionary. Add Y objects, gc those, and you have X+Y nil-keys in the dict. (If dict grown/rehashed, all nicely placed index 1 onwards)
it doesn't sounds like incorrect behavior (i.e. pruning a nil-ed keys before #finalizeValues could visit them).
Except, you know, if they're not registered for finalization at all, they're probably not meant to be finalized. Cheers, Henry