设想:
我用于开发的机器有 32Gb 的 DDR3 RAM、i7 3770、SSD。该项目很大,Scala 在增量编译期间大部分时间编译速度很快,但有时单个更改会导致重新编译数百个文件,然后需要一些时间来编译所有文件,并且 jrebel 需要一些好时间重新加载所有更改的文件。
问题:
将所有内容放在 RAMFS (Mac) 上会使编译和 jrebel 重新加载显着更快吗?
我的计划是将与项目直接相关的所有内容放在 RAMFS 分区中(.ivy、项目源、.sbt,甚至可能复制 JDK 等)。我会创建一个脚本来在启动时或手动执行所有这些操作,这不是问题。此外,我会设置文件同步任务,因此在操作系统失败的情况下丢失更改不会成为问题。
更新:
- 日志说 java 和 scala 源代码中约有 400 个是在清理后编译的。
- 在核心模块中更改一个文件后,它会在 50 秒内重新编译 130 个文件。
- jrebel 在 #1 之后需要 72 秒重新加载,在 #2 之后需要 50 秒
- 添加 -Drebel.check_class_hash=true 使 jrebel 在 #2 之后立即重新加载。
我对这些结果非常满意,但仍然对如何使 scala 编译更快感兴趣,因为在需要 170 秒的编译过程中,cpu 使用率最多只有 70%,只需大约 5 秒,编译期间的总体 cpu 使用率是 20%。
更新:
将 JVM、源代码、.ivy2 和 .sbt 文件夹放在 RAMDISK 上后,我注意到仅编译时间略有改进:从 132 秒到 122 秒(清理后)。所以,不值得麻烦。
笔记:
这不包括依赖解析,因为我使用这种方法来避免在清理后丢失依赖解析。