我正在参加关于编译器的大学课程,我们刚刚讨论了垃圾收集和释放内存的方法.然而,在课堂讲座和我们的教科书中,我被引导相信引用计数不是管理记忆的好方法.
原因是引用计数非常昂贵,因为程序必须插入许多附加指令来递增和递减引用计数.此外,每次引用计数更改时,程序必须检查它是否等于零,如果是,则回收内存.
我的教科书甚至还有一句话:“总的来说,引用计数的问题超出了它的优点,很少用于编程语言环境中的自动存储管理.
我的问题是:这些合法性问题是否存在? Objective-c是否以某种方式避免它们?如果是这样的话?
解决方法
引用计数确实有有意义的开销,这是真的.然而,跟踪垃圾收集器的“经典教科书”解决方案也并非没有缺点.最大的一个是非确定性,但暂停与吞吐量相关也是一个重要问题.
最后,ObjC并没有真正做出选择.最先进的复制收集器需要ObjC没有的语言的某些属性(例如没有原始指针).因此,尝试将教科书解决方案应用于ObjC最终需要一个部分保守的非复制收集器,这实际上与引用计数的速度大致相同但没有确定性行为.
(编辑)我的个人感受是吞吐量是次要的,甚至是第三级的,并且真正重要的争论归结为确定性行为与循环收集和通过复制的堆压缩.所有这三个都是如此有价值的属性,我很难选择一个.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。