垃圾回收的算法与实现1.2 指针_垃圾回收的算法与实现1.2 指针试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 算法 > 垃圾回收的算法与实现 > 1.2 指针

垃圾回收的算法与实现——1.2 指针

通过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.1 对象/ 头/ 域
• 1.2 指针 [当前]
• 1.3 mutator
• 1.4 堆
• 1.5 活动对象/ 非活动对象
• 1.6 分配
• 1.7 分块
• 1.8 根
• 1.9 评价标准
• 2.1 什么是GC标记- 清除算法