gpt4 book ai didi

Scala 懒惰 val : a good way to go easy on the garbage collector?

转载 作者:行者123 更新时间:2023-12-04 23:28:56 24 4
gpt4 key购买 nike

我想知道使用 lazy val 是否有意义防止不必要的堆分配,从而使 GC 的工作更容易一些。例如,我有这样写代码的习惯:

lazy val requiredParameterObject = new Foo {
val a = new ...
val b = new ...
// etc
}

for (a <- collection) a.someFunction(requiredParameterObject)

这里的想法是通过制作 requiredParameterObject懒惰,在 collection 的情况下,我正在节省堆分配是空的。但我想知道:做 lazy的内部细节使这不是一个有效的性能胜利?

最佳答案

您可以通过lazy val按名字:

lazy val requiredParameterObject = new Foo {
val a = new ...
val b = new ...
// etc
}

class C {
def someFunction(f: => Foo) {
f //(1)
}
}

val collection = List(new C, new C)
for (a <- collection) a.someFunction(requiredParameterObject)

在上面的代码中 Foo当集合的第一项在 ( 1 ) 中访问它时创建一次 - 如果集合为空,则永远不会创建。

如果 requiredParameterObject,您也可能获得更好的结果是一个普通函数,有效调用 requiredParameterObject仅在需要时才懒惰。但是,它将调用它的次数与集合中元素的数量一样多。

关于Scala 懒惰 val : a good way to go easy on the garbage collector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7906873/

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