I'm writing an experimental distributed computing package for Squeak. When I send a message to a remote object, I want to send all "free" arguments along with it (free arguments are those that have no other pointers to them). Thankfully, ImageSegment extracts exactly what I want, however, it scans the entire image, both tenured and young objects, taking half a second or more. This is great performance for extracting whole Projects, but for my small and frequent Message objects this is a problem. Since my Message objects and its arguments are usually young, I would like another primitive method that only scanned young space and moved any pointers into tenured space into the outPointers array. Ted Kaehler is the author of Interpreter>>primitiveStoreImageSegment. To change it into a new primitiveStoreYoungImageSegment, I think I only have to get rid of
youngStart _ self startOfMemory. "process all of memory"
and add
and: [fieldOop >= youngStart]
to the internal pointer test
((self longAt: fieldOop) bitAnd: MarkBit) = 0.
Can any GC/ImageSegment experts out there confirm this? Do you think it will be much faster?
Thanks, Anthony Hannan
P.S. I will post my Distributed Squeak package to this list when it is ready, hopefully in a month or two.
squeak-dev@lists.squeakfoundation.org