Hi newbies list,
I wrote a little Morph to monitor live processes vs terminated processes. In doing so, while experimenting, I ended up with one Process which seemed to be terminated inside of Process>>#terminate, which I think is strange. Is it strange? I ended up discarding the working copy of my image and reverting to the last saved version. It is interesting to see how many terminated Processes are left behind when WebServer has been running for a long time. Luckily they all seem to be swept away with a #garbageCollect. I do wonder why my image can go for 24 hours without something in the image performing a garbage collection. SHTextStylerSH80 creates and terminates many processes also, but they seem to get collected without my intervention (?). Thanks, Tim J _______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
Hi Tim J, as far as I know, every #basicNew: (primitive 71) triggers a GC. Not necessarily a full GC as through manually calling "Smalltalk garbageCollect", but at least an incremental GC. So, the image doing at least something (like the ticking clock in the upper right corner), will trigger a GC quite frequently. Best, Marcel
_______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
... maybe it is even every 100th (or n-th) time calling #basicNew:. Something like that. :-) Best, Marcel
_______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
In reply to this post by Tim Johnson-2
On 08/06/20 11:58 pm, Tim Johnson wrote:
> I do wonder why my image can go for 24 hours without something in the > image performing a garbage collection. garbage is collected only where VM's "free" memory runs low. See World Menu -> help -> vm statistics to see memory counts. In the same menu, you will also see "space left", which triggers garbage collection and then reports the free space. In Squeak, a "process" is just a chain of activation frames (contexts) tracking nested sends. This is the chain of contexts you see in Process browser (right pane) or in Debugger (top panel). HTH .. Subbu _______________________________________________ Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
In reply to this post by Tim Johnson-2
Re. garbage collection
The description of the GC from the book, "Squeak: Open Personal Computing and Multimedia" might help with your question. It's from the chapter "A Tour of the Squeak Object Engine," written by Tim Rowledge: "Squeak uses an interesting hybrid of generation scavenging and mark-sweep collection as its garbage collector. Once the image is loaded into memory the end address of the last object is used as a boundary mark to separate two generations [old and new]. When the remaining free memory runs low, or a preset number of objects have been allocated, the VM will pause to garbage collect the new object region (ObjectMemory>>IncrementalGC). This is done with a mark-sweep algorithm modified to trace only those objects in the new region, thus touching considerably less memory than an entire image sweep. ... [The] use of the two generations means that it can typically run in a very short time ... During activities like typing or browsing and coding, the system will run an incremental garbage collect one to five times per second. ... One limitation of an incremental collection is that any objects from the old region that are no longer referenced do not get freed and collected. Of course, the observation that lead to generation scavenging tells us that this usually doesn't matter since old objects generally continue to live. However, sometimes we do need to completely clean out the object memory. ... Squeak simply forces the system to believe that the old/new boundary is at the bottom of the old region. Thus, the entire image is now considered to be new objects, and all objects will be fully traced. Look at the ObjectMemory>>fullGC method for details." In another part of the chapter he says the generation scavenger method is based on the idea that older objects will tend to not need to be collected, or if they do, it's not that often. Some old objects will hang around forever, because something is always referencing them. However, newer objects tend to have very short lives, and so will be collected most frequently. ---Mark [hidden email] > On June 8, 2020 at 12:28 PM Tim Johnson <[hidden email]> wrote: > > > Hi newbies list, > > I wrote a little Morph to monitor live processes vs terminated > processes. In doing so, while experimenting, I ended up with one > Process which seemed to be terminated inside of Process>>#terminate, > which I think is strange. Is it strange? I ended up discarding the > working copy of my image and reverting to the last saved version. > > It is interesting to see how many terminated Processes are left behind > when WebServer has been running for a long time. Luckily they all seem > to be swept away with a #garbageCollect. I do wonder why my image can > go for 24 hours without something in the image performing a garbage > collection. SHTextStylerSH80 creates and terminates many processes > also, but they seem to get collected without my intervention (?). > > Thanks, > Tim J > _______________________________________________ > Beginners mailing list > [hidden email] > http://lists.squeakfoundation.org/mailman/listinfo/beginners Beginners mailing list [hidden email] http://lists.squeakfoundation.org/mailman/listinfo/beginners |
Free forum by Nabble | Edit this page |