间接引用
保守式GC有个缺点,就是不能使用类似复制算法等移动的算法,解决这个问题的方法之一就是“间接引用法”。
间接引用:简单的说就是在根和堆之间插入一个我们称为句柄的管理者,用来管理从根像堆的引用。采用间接引用, 即使是想要移动不明确的根所引用(所指向)的对象,只需要修改句柄所指向的对象就好了,不用直接修改根,这样即使根是非指针也不用因为直接修改了非指针根而导致程序错误。
我们以下图为例子:根在指向堆中引入了句柄作为管理者,所以称为间接引用。

当原本修改根引用的对象的地址时需要直接修改根的指针,此时若是根若是指针还就没有差错,若是非指针这程序差错。在这里我们修改根引用的对象的地址不必直接修改根,而是修改句柄。这样,就不必直接动用根而产生差错。操作后结果如图:

间接引用优点显而易见,可以让复制,标记-压缩等会移动对象的GC可以兼容保守式GC。缺点也显而易见:所有对象的修改都要经过句柄,这样会减低访问对象的速度,并且整个语言处理程序也会下降。
间接引用是解决保守式垃圾收集器不能使用移动算法的问题的一种方法。通过在根和堆之间引入句柄,即使根是非指针,也能安全地管理对象引用。虽然这种方法允许复制和标记-压缩等移动对象的GC与保守式GC兼容,但代价是降低了访问对象的速度和整体程序效率。间接引用的优点和缺点在实际应用中需要权衡考虑。
间接引用&spm=1001.2101.3001.5002&articleId=113660486&d=1&t=3&u=aa83ebbde6dd4531a7bbc91f86e4dd20)
1439

被折叠的 条评论
为什么被折叠?



