On Thursday, 23 November 2017 at 20:13:31 UTC, Adam Wilson wrote:

a precise GC will enable data with isolated or immutable indirections to
be safely moved between threads

I think you could in any case. What precise allows is to copy object during collection if there is no conservative pointers to the object, of course.

I would focus on a generational GC first for two reasons. The first is that you can delay the scans of the later gens if the Gen0 (nursery) has enough space, so for a lot of programs it would result in a significant cut-down in collection times.

This is like saying that having a large heap will allow you to cut-down collection time. The reason gen0 is fast is that it's mostly dead and you limit the amount of memory Gen0 scans to that of live set in Gen0 heap + remebered set in old gen.

It has nothing to do with delaying the scan, in fact Gen0 scans are way more frequent then scans of a simple single-gen GC.

The second is that you still typically have to stop the execution of the thread on the Gen0 collection (the objects most likely to be hot).

If your Gen0 collector is Stop the World, like all of Java collectors except for the most recent ones - ZGC and Shenandoah.

Ironically both are not generational :)

So with a non-generational concurrent collector you have to stop the thread for the entirety of the scan,


False again. Any "mostly" concurrent GC can scan with a super small pause that is typically used only to mark stacks of Threads. See also the 2 collectors I mentioned.

Go's GC is also non-generational (and SUUUPER popular) to put the last nail in the coffin of "I need generational GC because you can't do X without it?".

because you have no way to know which objects are hot and which are cold.

Why would that stop collector? There is no need to know what is hot, and garbage is always cold.


Reply via email to