|Welcome to the Monastery|
I've read for years that the field of gc is quite mature, and some killer algorithms exist (way beyond simple mark&sweep).
How is access kept local? Chasing all the pointers would hit all that main memory, even if the marks are collected somewhere central.
I like the idea of incremental garbage collection, so there will be no pauses.
What about the case of local variables that never have their ref taken, and are not inside a closure that itself gets "taken"? If detected at compile-time, those can be stacked most efficiently and not generate garbage at all.
On a machine with VM, must figure out when is "out" of memory! I can use gobs more than the machine has, transparantly to the program. Perhaps moniter page fault frequency? Best to check for garbage before a page gets swapped out at all.