我目前需要优化一个太慢的算法的 Scala 实现。它以函数方式实现,仅使用值 ( val
) 和不可变数据结构。我已经记住了重要的函数(所以我的代码中有一些可变映射),这使我的代码速度提高了一倍,我想知道下一步该做什么。
所以,我不是在寻找关于软件优化的通用建议(例如,首先优化你的算法,使用分析器,做基准测试......),而是寻找特定于Scala 或特定于 JVM 的优化建议。
因此,我的问题是在尝试优化 Scala 代码时首先要看哪里?通常会导致速度变慢的常见语言结构或模式是什么?
特别是,我正在就以下几点寻求建议:
- 我读到构造很慢,因为每次执行循环体时都会
for(...)
生成一个匿名类。是真的吗?还有其他地方可以生成匿名类吗?(例如,与匿名函数一起使用时)map()
- 在一般情况下,不可变集合是否比可变集合慢得多(尤其是在映射结构方面)?
- Scala 2.8、2.9 和 2.10 之间是否存在显着的性能差异?