There has been a ton of research for GC on the JVM. What are the differences between Go's approach and Java's? Are those differences due to linguistic differences or different goals?
I've found each language, out of expediency, often starts with a comparatively crude implementation of GC, and then gradually improves upon their work, leveraging knowledge from other platforms.
That said, gc is very subtle, and each runtime has unique characteristics that mean that what works best for one might not be ideal for others.