22|自动内存管理:把程序员从内存缺陷的海洋里解放出来
海纳
你好,我是海纳。
在前边的课程中,我们对于对象的创建和释放是比较随意的,完全没有理会内存泄漏的问题。现在,虚拟机的大部分功能都已经搭建完了,是时候回过头来解决这个问题了。
之前,我曾提到过,解释器并不知道一个对象从操作数栈上拿出来以后,是不是还在其他地方被引用着(例如全局变量表等),所以就无法武断地使用 delete 来释放一个对象。为了解决这个问题,这节课我们就引入自动内存管理技术。
自动内存管理
自动内存管理的研究开始得比较早。上个世纪 60 年代,就已经有很多优秀的成果了。经过不断发展,直到今天,自动内存管理技术仍然是一个很热门也很重要的研究方向,每年都有不同的改进在各种会议上被提出来,在各种带有自动内存管理的编程语言社区里(如 Java、Go),这也是一个大家普遍关心的技术点。
在研究自动内存管理算法的时候,人们经常把不存活的对象叫做垃圾(Garbage),所以自动内存管理技术在很多时候也被大家叫做垃圾回收技术(GC, Garbage Collection)。
GC 算法中最重要的两个角色就是 Mutator 和 Collector。
Mutator
Mutator 的本义是改变者。这个词所表达的是通过程序来改变对象之间的引用关系。因为我们所写的所有 Python 代码,都有可能改变对象的存活和死亡状态,以及它们之间的引用关系,那么这些 Python 代码就是 Mutator。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
1. 自动内存管理技术是解决程序员在对象创建和释放过程中可能出现的内存泄漏问题的重要技术。 2. 自动内存管理技术也被称为垃圾回收技术(GC, Garbage Collection),其中Mutator和Collector是两个重要的角色,分别负责改变对象引用关系和回收垃圾对象。 3. 引用计数算法是一种简单的垃圾回收算法,它通过记录对象的引用次数来判断对象是否为垃圾。 4. 循环引用问题在使用引用计数算法进行内存管理的语言中存在,为了解决这一问题,基于引用追踪的垃圾回收算法应运而生。 5. 基于引用追踪的垃圾回收算法以根集合作为起始点进行图的遍历,如果从根集合到某个对象是可达的,那么这个对象就叫做可达对象,也就是还活着的对象,否则就是不可达对象,可以被回收。 6. Tracing GC的标记阶段是从根集合出发,根据对象之间的引用关系在整个图中进行搜索,能访问到的对象就标记为活跃的。 7. Tracing GC的清除阶段的主要任务是回收未标记的那些对象所占的空间,通过维护一个freelist来管理未使用的空间。 8. Mark-Sweep算法是Tracing GC的一个典型的算法,分为标记和清除两个步骤,但存在内存碎片化的问题。 9. 为了解决循环引用问题,人们提出了很多改进算法,可以用于商用工程中,如复制算法等。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手写 Python 虚拟机》,新⼈⾸单¥59
《手写 Python 虚拟机》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论