gpt4 book ai didi

f# - F# 中的阴影和垃圾收集

转载 作者:行者123 更新时间:2023-12-02 07:24:17 25 4
gpt4 key购买 nike

这是我第一次遇到阴影,似乎没有专门针对我的问题的资源。

如果我执行以下操作

let x = a list
let x = another list

然后 x 将保存第二个列表的内容。

我假设(根据我的导师所说)第一个列表不会自动销毁,而只是在范围末尾进行垃圾回收。

我的问题是为什么?为什么我们不在不可变对象(immutable对象)被隐藏后自动删除第一个列表?这会让我认为数据仍然可以以某种方式访问​​。如果是这样,如何?

最佳答案

假设 x 是对“列表”的唯一引用,那么是的,在您的代码示例中,“列表”符合垃圾回收条件。

然而,符合垃圾回收条件并不意味着该对象在代码中的任何特定点被回收,尤其不是“在范围的末尾”。在范围末尾清理事物的想法与 C++* 中的析构函数有关,GC 在 .NET 中根本不像那样工作。 GC 同时运行,并且可能会或可能不会在任何时间点回收任何符合条件的东西。这甚至可能发生在代码退出当前作用域之前,或者更晚,或者 never . GC 甚至不关心您是否在范围内有一个引用对象的变量,如果您没有使用它,它就不算数(参见 active 分析)。

*尽管如此,F# 中也有类似的机制:请参阅 use bindings .

关于f# - F# 中的阴影和垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35442144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com