現在、遅すぎるアルゴリズムの Scala 実装を最適化する必要があります。機能的な方法で実装され、値 ( val
) と不変のデータ構造のみを使用します。私はすでに重要な関数をメモしているポイントにいます (そのため、私のコードには変更可能なマップがいくつかあります)。これにより、コードが 2 倍速くなり、次に何をすべきか疑問に思います。
したがって、私はソフトウェアの最適化に関する一般的なアドバイス (たとえば、最初にアルゴリズムを最適化する、プロファイラーを使用する、ベンチマークを実行するなど) ではなく、Scala 固有または JVM 固有の最適化アドバイスを求めています。
したがって、私の質問は、Scala コードを最適化しようとするとき、最初にどこを見るべきかということです。通常、速度低下の原因となる一般的な言語構造またはパターンは何ですか?
特に、次の点についてアドバイスを求めています。
- ループの本体が実行されるたびに
for(...)
匿名クラスが生成されるため、コンストラクトが遅いと読みました。本当ですか?匿名クラスが生成される場所は他にありますか? (例:無名関数で使用する場合)map()
- 不変コレクションは、一般的な場合 (特にマップ構造に関して) 可変コレクションよりも大幅に遅くなりますか?
- Scala 2.8、2.9、および 2.10 の間に大きなパフォーマンスの違いはありますか?