Yeah, I was taught (and it may be out of date), that as become: is a 2 way 
operation the identity of nil (as a singleton) would get swizzled, so it was 
safer to create a simple new object that could be easily gc’d (that’s what I 
vaguely recall anyway). (This was in early VA from the OTI guys, but maybe that 
gets handled better in modern VA, as I think become: is two way in VA right?)

Tim

> On 1 Apr 2020, at 08:11, jtuc...@objektfabrik.de wrote:
> 
> Tim,
> 
> out of curiosity: why do you suggest to create hundreds of thousands of 
> Strings instead of become: nil? 
> 
> Does Pharo do two-way become: ? 
> I'be been nilling instances for a little over 2 decades in VAST so far and 
> never had any troubles with it...
> 
> Other than that: the become: nil (or String new as you suggest) thing was the 
> first that came to my mind for the intermediate solution as well. Of course 
> that doesn't fix the code which doesn't dispose of the objects in the UI or 
> model...
> 
> 
> Joachim
> 
> 
> 
> 
> Am 01.04.20 um 08:42 schrieb Tim Mackinnon:
>> Hi Russ - a quick look at your stats seems to indicate that something is 
>> holding on to your model, I didn’t understand the first object growing by 2, 
>> but the second increases by 1 each time, and it looks like some form of root 
>> object holding on  to the others ? This of course means the GC can’t reclaim 
>> the chain of objects if something is holding on to that root globally.
>> 
>> Assigning something in the playground will hold onto it (I believe) so you 
>> can continue to reuse and inspect it - so that’s expected, but this looks 
>> like something in your UI?
>> 
>> You can break the chain manually (but it’s not a full solution), simply 
>> iterate over your root and become: String new (Save your image before doing 
>> it and see if it works to free up the cycles). Eg try something like this 
>> (haven’t tried this in Pharo myself, but worked in VA, so it should work 
>> here)
>> 
>> MyRootModel allInstances do: [ :m | m become: String new ]
>> 
>> If this works and reduces your memory usage, you now need to inspect one of 
>> those MyRootModel instances and see who is referencing it, and explain why. 
>> This is Sven’s pointerTo explanation.
>> 
>> For roots, you sometimes can use a WeakDictionary so that when nothing is 
>> referencing them, they get gc’d if you are doing some caching or have some 
>> factory concept.
>> 
>> It’s not uncommon to hit this when you get your system nearing completion , 
>> it’s the downside of not having to worry about memory referencing - 
>> ultimately you have to worry about it at the edges.
>> 
>> It is possible there is a Pharo bug, as over time I see large Pharo images 
>> but I was just messing around and put it down to failed experiments.
>> 
>> Hope this helps.
>> 
>> Tim
>> 
>>> On 31 Mar 2020, at 20:47, Russ Whaley <whaley.r...@gmail.com> 
>>> <mailto:whaley.r...@gmail.com> wrote:
>>> 
>>> 
>>> Here is some additional data - attached - I checked the number of instances 
>>> on select Classes before a UI load, during the UI load and after the UI 
>>> load (and again).  The class instances grow as expected, but do no release. 
>>>  I'm doing something wrong.  I'm going to try a fresh image next, however, 
>>> I expect the same thing to happen, just starting over at zero.
>>> 
>>> 
>>> 
>>> On Tue, Mar 31, 2020 at 12:57 PM Russ Whaley <whaley.r...@gmail.com 
>>> <mailto:whaley.r...@gmail.com>> wrote:
>>> Dario,
>>> Thanks for the reply!
>>> 
>>> When I closed my image - after running that huge query and leaving it in an 
>>> inspector... my image grew to 1.3GB, lol.
>>> 
>>> When I closed the inspector, and all the class browsers, did the garbage 
>>> collection, etc., it dropped back to 384MB.  Still huge, and all my Class 
>>> instances are still there.  I'm getting ready to also drop my Playground - 
>>> after I copy all the code snippets out and see if that has any impact.  I'm 
>>> also going to try a fresh image and see if there is the same growth pattern 
>>> as here.
>>> 
>>> Perhaps I'm doing something wrong with the way I'm creating and storing my 
>>> object instances - which is generally Class new, fill out some attributes, 
>>> then add it to a collection or Dictionary.
>>> 
>>> All my Object tests create sample data (objects) - over and over as well.
>>> 
>>> 
>>> On Tue, Mar 31, 2020 at 12:20 PM dario.trussardi65 
>>> <dario.trussard...@gmail.com <mailto:dario.trussard...@gmail.com>> wrote:
>>> Ciao,
>>> 
>>> 
>>> > My image size keeps growing and growing.  I've been scouring Google and 
>>> > mailing lists, trying to find a solution.
>>> 
>>>         i have the same problem with a Pharo 7 image.
>>> 
>>>         Maybe it has nothing to do.
>>> 
>>>         But after close all the class browser windows the image save return 
>>> to a " valid " size.
>>> 
>>>         Dario
>>> 
>>> 
>>> -- 
>>> Russ Whaley
>>> whaley.r...@gmail.com <mailto:whaley.r...@gmail.com>
>>> 
>>> -- 
>>> Russ Whaley
>>> whaley.r...@gmail.com <mailto:whaley.r...@gmail.com>
>>> <Class instances tests.pdf>
> 
> -- 
> -----------------------------------------------------------------------
> Objektfabrik Joachim Tuchel          mailto:jtuc...@objektfabrik.de 
> <mailto:jtuc...@objektfabrik.de>
> Fliederweg 1                         http://www.objektfabrik.de 
> <http://www.objektfabrik.de/>
> D-71640 Ludwigsburg                  http://joachimtuchel.wordpress.com 
> <http://joachimtuchel.wordpress.com/>
> Telefon: +49 7141 56 10 86 0         Fax: +49 7141 56 10 86 1
> 
> 

Reply via email to