通过GC,对象会被销毁或保留。这时候起到关键作用的就是指针。因为GC 是根据对象的指针指向去搜寻其他对象的。另一方面,GC 对非指针不进行任何操作。 在这里有两点需要我们注意。 首先,要注意语言处理程序是否能判别指针和非指针。要判别指针和非指针需要花费一定的功夫,关于这一点我们会在第6 章详细说明。除第6 章之外,在“算法篇”的各个章节中,我们都以GC 可判别对象各域中的值是指针还是非指针为前提进行解说。 另一点是指针要指向对象的哪个部分。指针如果指向对象首地址以外的部分,GC 就会变得非常复杂。在大多数语言处理程序中,指针都默认指向对象的首地址。因为存在这个制约条件,不仅是GC,就连语言处理程序的其他各种处理都变得简单了。因此我们在“算法篇”中也以此条件为前提。 在“算法篇”中,对象和指针的关系如图1.2 所示。 图1.2 对象和指针 在此我们把图1.2 中的B 和C 称为A 的子对象。对某个对象的子对象进行某项处理是GC的基本操作。在“算法篇”的伪代码部分,我们用children(obj) 获取指向对象obj 的子对象的指针数组。使用这个children() 函数,我们可以把遍历子对象的操作写得简单一些。打个比方,我们假设执行了以下代码来处理图1.2 的情况。 for(child : children(A)) func(*child) 此时,对象B、C 依次作为实参调用func() 函数。
垃圾回收的算法与实现——1.2 指针
书名: 垃圾回收的算法与实现
作者: 中村成洋 | 相川光
出版社: 人民邮电出版社
原作名: ガベージコレクションのアルゴリズムと実装
译者: 丁灵 | 相川光
页数: 456
定价: 99.00元
装帧: 平装
ISBN: 9787115427472