JVM在进行GC的时候一般都会在安全点或者安全区域,在这个时候对象的引用关系不会变化。在编译器对代码编译的时候,会预先在这些地方生成栈(或者寄存器)中哪些位置引用了哪些对象(oopmap原理),这样在进行GC时就很容易顺着GC Root找到哪些类对象需要回收了!
你看看哪些是可以做为GCRoot的根节点就知道了,你JVM在运行的时候,所有存错的对象,本身就类似一棵树,找到所有的树根节点,就找到所有存活的类了。