我正在生成一个 HashMap ,我可以在其中估计阶乘所需的大小:
import scala.collection.mutable.HashMap
val mm = new HashMap [Int, BigInt]
mm.put (0, 1)
def fak (i: Int) : BigInt = mm.getOrElseUpdate (i, i * fak (i-1))
我经常按升序请求素数的阶乘(fak),并且喜欢达到相当高的值(> 10 Mio 阶乘)。
使用大约 70000 调用它会导致 OutOfMemory-Error: Java Heap Space。我开始了这个程序
scala -J-Xmx4G TestFak 70000
以 60000 作为参数,它可以工作。我猜,它构建了 70000 个 MutableMap,它们经常被丢弃和垃圾收集。由于我事先知道所需的大小,是否可以从一开始就生成正确大小的 mutableMap?
该错误在 mm.getOrElseUpdate - 行中引发。
版本:Scala 版本 2.11.6(OpenJDK 64 位服务器 VM,Java 1.8.0_66-internal)