Geo*_*ing 5 memory-management scala set
考虑以下Set基准:
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))
}
}
Run Code Online (Sandbox Code Playgroud)
编译和运行产生
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
...
Run Code Online (Sandbox Code Playgroud)
即,Scala无法在具有8 GB内存的计算机上代表一组1000万个Int.这是预期的行为吗?有没有办法减少内存占用?
Rex*_*err 10
通用不可变集确实需要大量内存.默认值仅为256M堆,每个对象只留下26个字节.用于不可变集的散列特里通常每个对象需要一到两百个字节,每个元素额外需要60个字节.如果你添加-J-Xmx2G命令行将堆空间增加到2G,你应该没问题.
(例如,这种开销水平是存在位集的一个原因.)
| 归档时间: |
|
| 查看次数: |
516 次 |
| 最近记录: |