gpt4 book ai didi

performance - Scala 的惰性 val 的(隐藏)成本是多少?

转载 作者:行者123 更新时间:2023-12-03 04:19:34 25 4
gpt4 key购买 nike

Scala 的一个方便的功能是 lazy val,其中 val 的计算会被延迟,直到需要时(第一次访问时)。

当然,lazy val 必须有一些开销 - Scala 必须在某个地方跟踪该值是否已经被求值,并且求值必须同步,因为多个线程可能会尝试访问该值第一次同时出现。

lazy val 的成本到底是多少 - 是否有一个与 lazy val 关联的隐藏 bool 标志来跟踪它是否已被评估,什么完全同步,还有更多成本吗?

此外,假设我这样做:

class Something {
lazy val (x, y) = { ... }
}

这与拥有两个单独的 lazy val xy 相同吗?还是我只获得一次开销? (x,y)

最佳答案

这取自 scala mailing list并给出了 Java 代码(而不是字节码)的 lazy 实现细节:

class LazyTest {
lazy val msg = "Lazy"
}

被编译为与以下 Java 代码等效的内容:

class LazyTest {
public int bitmap$0;
private String msg;

public String msg() {
if ((bitmap$0 & 1) == 0) {
synchronized (this) {
if ((bitmap$0 & 1) == 0) {
synchronized (this) {
msg = "Lazy";
}
}
bitmap$0 = bitmap$0 | 1;
}
}
return msg;
}

}

关于performance - Scala 的惰性 val 的(隐藏)成本是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3041253/

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