I think I remember reading that Self uses a generational copying garbage collector. Is that right? If so, I'm curious about why that approach was taken instead of something like an incremental tri-color collector.
A generational collector would avoid the frequent pauses of a mark and sweep collector but would still have infrequent pauses which (I would think) would be a problem for a interactive system.
Cheers, Steve
On Tuesday 27 August 2002 18:29, Steve Dekorte wrote:
I think I remember reading that Self uses a generational copying garbage collector. Is that right?
Yes, there is a "eden space" where new objects are born, two areas forming semi-spaces for "young objects" and a large area of old objects. So we have three generations in all.
If so, I'm curious about why that approach was taken instead of something like an incremental tri-color collector.
Probably one of the language's designers read this paper and thought it was a good idea:
David Ungar, "Generation Scavenging: A Non-disruptive High Performance Storage Reclamation Algorithm", in Proceedings of the ACM SIGSOFT/SIGPLAN Software Engineering Symposium on Practical Software Development Environments, 1984.
;-)
A generational collector would avoid the frequent pauses of a mark and sweep collector but would still have infrequent pauses which (I would think) would be a problem for a interactive system.
It is indeed a problem - I have spent quite a while staring at the "collecting garbage" dialog box waiting for the system to unfreeze. But that is simply because no effort was made to make the "old space" collection more incremental. If such an effort/redesign were made (while keeping the other generations as they are now) then the system would be more suitable for interactive use.
-- Jecel
self-interest@lists.selflanguage.org