2014-06-29 22:31 GMT+02:00 Johan Brichau <[email protected]>:

>
> On 27 Jun 2014, at 14:00, Goubier Thierry <[email protected]> wrote:
>
> > It seems to depend on the Nautilus window state. If you've just opened
> it, then nothing seems to be amiss. If you start to select things in it,
> you start to see time spent in updateClassView, but why?
>
> I just found that the instances are being kept by the
> MorphTreeListManager#selectedMorphs instvar. So, that observation is
> correct: you need to have a package selected.
>
> What seems to happen is that on every package load, the Nautilus package
> tree is updated (which means a PackageTreePackageNodeModel is created for
> each package in the image via #asNautilusNodeWithModel:).
> This update does not clear the selectedMorphs list and just this single
> reference seem to keep the entire package tree model and its Morphs in
> memory.
>
> There were 496 morphs in the selectedMorphs list and when I cleaned that,
> all trailing Morphs and PackageNodeModelNodes (and all the other garbage)
> could be gc'ed.
>
> On to investigating the growth of the selectedMorphs variable...
>
> Johan
>


Yes, we had quite some  bugs with this package tree update in the past.
What I don't understand is, why
is the whole tree removed and rebuild, maybe this is a common strategy in
Morphic, update a list ore tree
will always rebuild the whole morph structure? But it happens even if the
structure is the same and
just this little package/dirty package icon is updated.

Another issue is this "selected package/package selection". The tree (and
for example the
category list and/or method list" as well), stores the selection on
multiple ways, in the model (PackageTreeNautilus), the
UI (PackageTreeNautilusUi) and the treelist morph. Once as a
SelectedTreeNode, a Package from Nautilus Model and
once as a PackgeTreeSelection/PackageTreeTagSelection.
I find it pretty confusing.


BTW, I still can not reproduce this memory leak behavior. I tried this:

[ Gofer new smalltalkhubUser: 'ObjectProfile'
    project: 'Roassal2';
    package: 'ConfigurationOfRoassal2';
    load.
(Smalltalk at: #ConfigurationOfRoassal2) load  ] timeToRun.

with and without an open SystemBrowser. But the load time and
memory consumption is the same.


Nicolai

Reply via email to