分配(allocation)指的是在内存空间中分配对象。当mutator 需要新对象时,就会向分配器(allocator)申请一个大小合适的空间。分配器则在堆的可用空间中找寻满足要求的空间,返回给mutator。 像Java 和Ruby 这些配备了GC 的编程语言在生成实例时,会在内部进行分配。另一方面,因为C 语言和C++ 没有配备GC,所以程序员要使用malloc() 函数和new 运算符等进行手动分配。 然而,当堆被所有活动对象占满时,就算运行GC 也无法分配可用空间。这时候我们有以下两种选择。 1. 销毁至今为止的所有计算结果,输出错误信息 2. 扩大堆,分配可用空间 之前在1.4 节中也讲过,为了让本书的“算法篇”更易懂,这里我们选择第1 个选项。我们将在伪代码中用allocation_fail() 函数进行第1 项的处理。 不过,在现实的执行环境中选择第2 项会更贴合实际。因为我们必须尽可能地避免因内存不足造成的程序停止。在内存空间大小没有特殊限制的情况下,应该扩大堆。
垃圾回收的算法与实现——1.6 分配
书名: 垃圾回收的算法与实现
作者: 中村成洋 | 相川光
出版社: 人民邮电出版社
原作名: ガベージコレクションのアルゴリズムと実装
译者: 丁灵 | 相川光
页数: 456
定价: 99.00元
装帧: 平装
ISBN: 9787115427472