gpt4 book ai didi

scala - 这个 Scala 代码可以使用更少的内存吗?

转载 作者:行者123 更新时间:2023-12-02 10:08:40 24 4
gpt4 key购买 nike

考虑以下设置基准:

import scala.collection.immutable._

object SetTest extends App {
def time[a](f: => a): (a,Double) = {
val start = System.nanoTime()
val result: a = f
val end = System.nanoTime()
(result, 1e-9*(end-start))
}

for (n <- List(1000000,10000000)) {
println("n = %d".format(n))
val (s2,t2) = time((Set() ++ (1 to n)).sum)
println("sum %d, time %g".format(s2,t2))
}
}

编译并运行产生

tile:scalafab% scala SetTest
n = 1000000
sum 1784293664, time 0.982045
n = 10000000
Exception in thread "Poller SunPKCS11-Darwin" java.lang.OutOfMemoryError: Java heap space
...

即,Scala 无法在具有 8 GB 内存的机器上表示一组 1000 万个 Int。这是预期的行为吗?有什么方法可以减少内存占用吗?

最佳答案

通用不可变集确实占用大量内存。默认值仅为 256M 堆,每个对象仅留下 26 字节。不可变集的哈希字典树通常 每个对象需要一到两百个字节 每个元素额外需要 60 个字节左右。如果您在命令行上添加 -J-Xmx2G 将堆空间增加到 2G,应该没问题。

(例如,这种级别的开销是存在位集的原因之一。)

关于scala - 这个 Scala 代码可以使用更少的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133958/

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