gpt4 book ai didi

out-of-memory - 基于不可变数据结构的应用程序不会耗尽内存吗?

转载 作者:行者123 更新时间:2023-12-04 06:20:47 24 4
gpt4 key购买 nike

没关系 redux 什么的——我只是在问 Immutable.JS、Ramda 等。

如果一个数据结构的新版本是通过结构共享创建的,这意味着每个新版本都需要有一个指向前一个版本的指针,以便它能够共享任何东西。这再次意味着旧版本的结构不能被垃圾收集,这再次意味着,在您拥有状态的应用程序中,此状态将使用单调递增的内存量。如果是这种情况,那么该数据结构将在某个时候使用所有可用内存,如果它不断被修改的话。

我在这里错过了什么吗?我可以看到对于网络上的许多(大多数)用例(在浏览器中),这不是问题,因为您可能每次只是更改结构的一小部分,并且您可能会离开页面或者在使用所有内存之前重新加载它,但是对于长时间运行的进程,这应该会造成问题。对?对吗?

最佳答案

If new versions of a data structure is created by structural sharing, that means that every new version needs to have a pointer to the previous version in order for it to be able to share anything.



这通常是不正确的。新版本将具有指向先前版本的子部分的指针。所以它共享一个分数(
通常几乎所有)旧版本的数据。

例如,Ocaml 的 map ( representedimplemented 的一些 self-balancing binary search tree 变体 red-black trees )是不可变的:请参阅 Map 的文档.但是,如果您向(从) map 添加(或删除)某些绑定(bind),您将获得一个与旧 map 共享其大部分(但不是全部)内部节点的新 map 。

所以垃圾收集器最终会“删除”那些与当前“状态”无关的旧内部节点。

顺便说一句,网络编程(和网络导航)与 continuations 有关和 continuation-passing style .参见例如伯德的 Web Programming with Continuations以及 C.Queinnec 的几篇论文.

阅读更多关于 monads在函数式编程中。

关于out-of-memory - 基于不可变数据结构的应用程序不会耗尽内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43936752/

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