cyclic looping with [0 == object] whileFalse: [object := objectnextObject].

Mathieu Suen mathk.sue at
Mon Nov 5 22:43:44 UTC 2007

On Nov 5, 2007, at 8:18 PM, John M McIntosh wrote:

> On Nov 5, 2007, at 10:44 AM, Rob Withers wrote:
>> I thought of a possibility.  It could be that I am creating  
>> objects (BlockContexts and MethodContexts) as fast as I process  
>> them in this loop. If the loop is creating objects, then they are  
>> bound to be at the end of memory and I am bound to not be able to  
>> catch up to them.  In this case, my #ifTrue: msg is a real msg  
>> creating a real BlockContext each time through the loop, because  
>> of my Compiler changes, and the associated MethodContexts are  
>> being created too.  (My addition of anOrderedCollection>>#add:/ 
>> #addLast:/#grow... are being recorded as well). Each time through  
>> a new instance of the BlockContext is being created.
>> That sucks.  I can't do anything about it.
> As an optimization methodContexts are recycled and reused, this  
> feature decreases the time take
> to make a new context. When a method returns the local context is  
> then stuffed onto the free context chain.
> However on a GC the free context chain is GCed also. So usually you  
> are not making a new object (MethodContexts ) for the message  
> activation.

But MethodContext are no more recyvled when thisContext is push one  
the stack:

	"Puts reclaimability of this context in question."

	self fetchNextBytecode.
	reclaimableContextCount := 0.
	self internalPush: activeContext.

And context are puch on the stack when a block is create.


> --
> ====================================================================== 
> =====
> John M. McIntosh <johnmci at>
> Corporate Smalltalk Consulting Ltd.  http:// 
> ====================================================================== 
> =====

More information about the Squeak-dev mailing list