UI demo performance, GC

Brian Rice water at tunes.org
Tue Mar 20 23:31:47 PDT 2007


On Mar 20, 2007, at 7:56 PM, Timmy Douglas wrote:
> Brian Rice <water at tunes.org> writes:
>
>> Note that it uses Squeak-style forwarding pointers which is not the
>> same as Lee's choice of card-marking as a scheme for GC. Card-marking
>> does have its advantages (which can be found with a little research).
>> Mostly I wrote it as an exercise in comparing Pidgin vs. Slang,  
>> the C-
>> like dialects for VM implementation.
>
> When you say card-marking, are you referring to the kind with
> write-barriers that maintain a list of old generation -> new
> generation mappings? It seems that the cards in mark-compact.slate  
> just
> make sure that stuff on the C stack isn't moved during the garbage
> collection.

Yes, there is at least a slight difference between what Lee  
implemented and the term card-marking, although they relate. Lee  
didn't prioritize generational GC support.

> How many changes would gc.slate have to undergo to be functional? It
> looks fairly complete but I can't really understand how it works
> without spending a few hours on it.

I don't know. I performed a fairly literal translation on a working  
piece of code, but Slate's memory layout is somewhat different and we  
never compiled with that GC.

> Would you mind telling me in a
> sentence how squeak-style forwarding pointers work compared to normal
> forwarding pointers?

Here is a reasonably-informative tour of the basics of the Squeak  
engine:
  http://www.rowledge.org/tim/squeak/OE-Tour.html

A presentation that is more in-depth about the Squeak GC:
  http://prog2.vub.ac.be/~cderoove/esugtalks/SqueakGCLogic.pdf

Survey of Smalltalk GCs:
  http://www.esug.org/data/ESUG2006/pres/gctalkjohnmacintosh.pdf

 From my memory, Squeak's forwarding pointers are used to move  
objects outside of a full GC, when compaction moves a lot of objects  
around en masse and obliterates any forwarding pointers around.  
Basically when doing an incremental collection, if an object is  
tenured into old-space from new-space, a forwarding pointer is used  
where the object was initially located: it consists of a special  
header word followed by the pointer which references the new  
location. I believe it is also used for become- operations? Take all  
of this with a grain of salt, please. :)

--
-Brian
http://briantrice.com

-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 186 bytes
Desc: This is a digitally signed message part
Url : /archives/slate/attachments/20070320/d38fc894/PGP.pgp


More information about the Slate mailing list