注: Akka のチュートリアル コードをテスト ケースとして使用しますが、私の質問は、一般的な Scala の不変性のパフォーマンスと、結果として JVM を調整する方法についてです。
私は Akka に近づき、そのチュートリアル コードAkka を開始しようとしていました。チュートリアルのソース コードをそのまま自分のプロジェクトに貼り付けて実行すると、次の出力が得られました。
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
}
このように、変数アキュムレータを使用せずに
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 を調整するための適切なルールを誰か指摘できますか?
sbt 0.12.0 とデフォルトの Java オプション (sbt.bat にバンドル) を使用して、Scala 2.9 でコードを実行しました。
_JAVA_OPTS=-Xmx512M -XX:MaxPermSize=256m -XX:ReservedCodeCacheSize=128m
前もって感謝します