【发布时间】:2014-12-24 02:54:50
【问题描述】:
如果我知道某个值很可能在它与垃圾收集器的第一次相遇中幸存下来,有没有办法让 GHC 知道,所以它可以直接在 Nursery 之外的某个地方分配它?例如,如果我用一堆小块构建一个大结构,我知道每块至少会持续到整个结构完成。
【问题讨论】:
-
作为一个小小的元评论:我讨厌这种问题,因为你总是想,“不,没有办法。”但在那之后的直接想法是,“好吧,我确定我对编译器并不了解一切(可能只有一两个人知道),而且由于它是开源的,当然有一个做任何可计算的事情的方法,但是......这不是一个真正的答案......”。有没有人有建设性的方式来回答这类问题?
-
这个优化被称为“pretenuring”——已经有一些研究,但我不相信它被整合到任何主流编译器/运行时。
-
@DanielWagner,除了我可能错过的任何功能外,我想知道是否有一些棘手的方法可以利用 GHC 处理大型和/或异物的机制。我无法立即看到这样的东西,但我真的不熟悉这些系统。
-
@Zim-ZamO'Pootertoot 我相信“过早的任期”(你所链接的)描述了相反的情况,一种通过避免在第一次遇到 GC 时防止短期对象离开 Nursery 的机制任何与 GC 的相遇。这个问题要求一种机制让长寿命对象开始提升,以便第一次遇到 GC 时不需要提升它们。
-
@Cirdec 问题是我链接到的定义将 pretenuring 描述为一个问题(过早提升短期对象),而不是优化(早期提升长期对象) . This 是一篇将其描述为优化的论文,也是 this paper,但是 memorymanagement.org 链接是我能找到的唯一未嵌入论文的定义
标签: haskell garbage-collection ghc