gpt4 book ai didi

scala - 从内存的角度来看,将 List 转换为 Iterator 有意义吗?

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

如果我有一个包含大量元素的 List[HugeObjects],我只需要迭代一次并且不对其进行任何操作(例如追加、前置等),我这样做是否有意义将该 List 转换为 Iterator,因此当我对其进行迭代时,元素将被删除并且将有更多内存可用(因为 GC 会处理他们在某个时候)?

最佳答案

我预计答案是“不,迭代器保留对列表的引用,因此只要您使用迭代器,就不会对任何内容进行垃圾回收。”

但是在查看了实际的实现(https://github.com/scala/scala/blob/v2.12.2/src/library/scala/collection/LinearSeqLike.scala#L41)之后,事实证明它并没有:有一条评论特别提到没有“防止 [ing] 原始序列来自垃圾收集”,并且

List("a").iterator.getClass().getDeclaredFields()

确认 these 是唯一的字段,因此没有隐藏的引用。

但是!你不说你要对 List 进行什么操作,但是如果你可以转换为迭代器,那么 List 代码也很可能会丢失对开头的引用的列表,垃圾收集器可以收集它:When is a Java local variable eligible for GC? . Scala 生成的代码可能会阻止此优化,但我不希望如此。

关于scala - 从内存的角度来看,将 List 转换为 Iterator 有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44588168/

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