Ruby 不同实现中的垃圾回收机制解析
1. JRuby 和 Rubinius 的垃圾回收概述
在 Ruby 的不同实现中,JRuby 和 Rubinius 的垃圾回收机制与 MRI 有所不同。JRuby 借助 Java 虚拟机(JVM)实现 Ruby,因此能够利用 JVM 成熟的垃圾回收(GC)系统来管理 Ruby 对象的内存。JVM 的垃圾回收器经过多年的优化,这是使用 JVM 平台的主要优势之一。
Rubinius 的 C++ 虚拟机也包含一个复杂且高效的垃圾回收器,它采用了一些与 JVM 相同的底层算法。选择 Rubinius 作为 Ruby 平台的好处之一就是其先进的 GC 系统。
JRuby 和 Rubinius 使用的垃圾回收器与 MRI 的垃圾回收器在三个方面存在差异:
- 采用复制垃圾回收算法来为新对象分配内存,并从垃圾对象中回收内存,而非使用空闲列表。
- 运用分代垃圾回收技术,对新旧 Ruby 对象进行不同处理。
- 采用并发垃圾回收,在应用程序代码运行的同时执行一些 GC 任务。
值得注意的是,尽管 JRuby 和 Rubinius 使用的 GC 系统与 MRI 的标记 - 清除垃圾回收器有很大不同,但 MRI 也开始引入其中一些理念。例如,Ruby 2.1 的 GC 系统已开始使用分代和并发垃圾回收。
2. 复制垃圾回收
2.1 复制垃圾回收的起源
1963 年,在 John McCarthy 构建第一个 Lisp 垃圾回收器的三年后,Marvin Minsky 开发了一种名为复制垃圾回收的内存分配和回收方法。该算法最初也用于 Lisp,
超级会员免费看
订阅专栏 解锁全文
13

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



