階乗の場合、必要なサイズを推定できる 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 個の MutableMaps が構築され、頻繁に破棄され、ガベージ コレクションが収集されます。事前に必要なサイズを知っているので、最初から正しいサイズの mutableMap を生成することは可能ですか?
エラーは mm.getOrElseUpdate - Line でスローされます。
バージョン: Scala バージョン 2.11.6 (OpenJDK 64 ビット サーバー VM、Java 1.8.0_66-internal)