gpt4 book ai didi

scala - Scala(或 JVM)是​​否曾经优化过(函数)对象?

转载 作者:行者123 更新时间:2023-12-04 19:16:10 27 4
gpt4 key购买 nike

在 Scala 的很多情况下,例如简单的、局部范围的函数调用,可以想象通常理论上可能完全摆脱函数对象。但是 AFAIK,JVM 不知道如何做到这一点,我认为 Scala 也不知道。正确的?

匿名函数对象总是密封的吗?如果没有,那么可以完成多少内联就会有一个非常严格的限制。正确的?

有没有人知道任何可能解决这些优化问题的计划工作?

另请参阅相关的纯 Java 问题:Does a modern JVM optimize simple inline anonymous class allocation?

(“不要过早优化”、“没关系”等的口号在这一点上是非常多余的,没有用。)

最佳答案

内联加上转义分析可以做到这一点。如果您使用 JVM 7 中的编译报告,您可以向自己证明这一点,或者对以下两个代码片段进行基准测试:

def rfor(i0: Int, i1: Int)(f: Int => Unit) {
var i = i0
while (i <= i1) {
f(i)
i += 1
}
}

def whiley = {
var s = 0
var n = 1
while (n <= 500000000) {
val k = n >> 2
var i = 1
while (i <= 2) {
s += i*k
i += 1
}
n += 1
}
s
}

def rfory = {
var s = 0
var n = 0
while (n <= 500000000) {
val k = n >> 2
rfor(1, 2){ s += k * _ }
n += 1
}
s
}

在我的机器上,第二个至少和第一个一样快(有时更快),尽管第二个似乎需要每隔一次迭代创建一个函数。

关于scala - Scala(或 JVM)是​​否曾经优化过(函数)对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441167/

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