上QQ阅读APP看书,第一时间看更新
2.4 GC的根
垃圾回收的根和虚拟机运行时紧密结合,理解起来并不容易。需要回答两个问题:哪些是垃圾回收的根?如何实现标记?
以JVM为例,JVM为了能执行Java代码,实现了一套完整的编译、解释、执行框架,其中编译是一个独立的模块,执行是另一个模块。而GC的根既与执行框架相关,又与编译相关,除此之外,GC的根还与语言特性和JVM的实现相关。
在JVM中存在两种类型的根:强根和弱根。强根是GC的真正根,用于识别堆空间中的活跃对象;弱根并非用于识别活跃对象,只是为了支持语言特性(如Java的引用)或者JVM内部实现的优化而引入的。