I think that Go GC is not generational. If I'm not mistaken, the keynote you linked explains they tried it and the gain were not there.
I think that Go GC is not generational. If I'm not mistaken, the keynote you linked explains they tried it and the gain were not there.
In Go, most of those objects actually do get allocated directly on the stack, or as fields directly inside other objects. So they are never seen by the GC. This is one of the aspects of the language design that I really admire.
Or, you could look at as saying that Go does have a generational memory manager, and the first generation is "on the stack".
Most golang code I've seen still relies on pointers to objects, so unless escape analysis is better than say what the JVM or .NET offer, it's not really that different from them. .NET already has value types, and the JVM should be getting them soonish. So there really isn't that much difference from this aspect.
As you say, value types are coming soon, but they don't exist now, so right now there is a lot of difference (and in practice will be for a long time, because not everything is going to migrate to value types immediately).
Whether the language uses value types or heap allocated types changes the constant factor, but the core hypothesis isn't affected - you can't allocate everything on the stack. Memory copying costs start overtaking GC overhead if you try too hard.
If you want to know more about the current progress, there is a great presentation -> blog here: https://blog.golang.org/ismmkeynote
And you can see the most recent generational GC code here: https://go-review.googlesource.com/c/go/+/137482
Though my guess is it won't get merged into mainline for Go1.13 as it is already in code freeze.
That something is much higher memory requirement for same size workload as compared to Go.