> it seems crazy to me that Go's GC can Just Work with a VM you're writing in Go itself.
Far from it, it is more natural to do that than anything else.
Simplified example:
type Array struct {
items *any[]
}
type Object struct {
fields map[string]*any
}
These are the JVM values, and when the references to them disappear, the JVM values they reference can be GC'd as well.