注意:尽管我将使用 Akka 教程代码作为测试用例,但我的问题是关于 Scala 的一般不变性性能,以及如何调整 JVM
我正在接近 Akka,我正在尝试它的教程代码Akka getting started;我将教程中的源代码原样粘贴到我自己的项目中并运行它,获得以下输出:
Calculation time: 660 milliseconds
在此之后,我尝试在代码上做一些工作,重写这个函数
def calculatePiFor(start: Int, nrOfElements: Int): Double = {
var acc = 0.0
for (i <- start until (start + nrOfElements))
acc += 4.0 * (1 - (i % 2) * 2) / (2 * i + 1)
acc
}
不使用var累加器,像这样
def calculatePiFor(start: Int, nrOfElements: Int): Double = {
val range = start until (start + nrOfElements)
val computation = range.map(i => 4.0 * (1 - (i % 2) * 2) / (2 * i + 1))
computation.sum
}
好吧,它起作用了,但性能有点退化
Calculation time: 1737 milliseconds
我的问题来了:我的功能是否有任何重大错误,或者毫无疑问会导致这些表现?如果没有,任何人都可以指出调整 JVM 以提高这些性能的好规则吗?
我在 Scala 2.9 上运行我的代码,使用 sbt 0.12.0 及其默认的 java 选项(捆绑在 sbt.bat 中):
_JAVA_OPTS=-Xmx512M -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=128m
提前致谢