[ENH][VM][FIX] faster garbage collection, and removal of unused vars

John M McIntosh johnmci at smalltalkconsulting.com
Mon Dec 30 08:44:05 UTC 2002


OOps forgot:

  I also change the logic that actually moves the bytes in the compactor  
a bit to decrement the target from the starting location versus what  
was there before. Although GCC made sense of the loop and built some  
nice assembler, CodeWarrior for Mac Classic extruded some ugly  
assembler. With the change both compilers produce optimal (almost) code  
for moving chunks of bytes.

The Smalltalk for the GC benchmark is this ugly chunk of code.

| counter target keep |
	
	counter _ 0.
	Smalltalk garbageCollect.
	Smalltalk garbageCollect.
	Smalltalk garbageCollect.
	Smalltalk allObjectsDo: [:e | counter _ counter + 1].
	target _ 1000000 - counter.
	keep _ OrderedCollection new: 60000.
	target//10 timesRepeat: [| element |
		element _ OrderedCollection new: 10.
		10 timesRepeat: [element add: Object new].
		keep add: element].
	Smalltalk garbageCollect.
	Smalltalk garbageCollect.
	Smalltalk garbageCollect.
	counter _ 0.
	Smalltalk allObjectsDo: [:e | counter _ counter + 1].
	Transcript show: counter;cr.
	10 timesRepeat:
		[Transcript show: (Time millisecondsToRun: [	Smalltalk  
garbageCollect]);cr].

PS optimal assembler would consider cache line logic. But that's a job  
for a custom memory move routine. memcpy does not work well here  
because it has too many checks and usually we move things 4/8/12 bytes  
or so, so the overhead of calling memcpy is too great.

--
======================================================================== 
===
John M. McIntosh <johnmci at smalltalkconsulting.com> 1-800-477-2659
Corporate Smalltalk Consulting Ltd.  http://www.smalltalkconsulting.com
======================================================================== 
===




More information about the Squeak-dev mailing list