情景:
我用于开发的机器有32Gb的DDR3内存,i7 3770,SSD。项目很大,Scala在增量编译期间大部分时间编译很快,但有时一次更改会导致重新编译数百个文件,然后需要一些时间来编译所有和jrebel重新加载所有已更改文件的好时机。
问题:
将所有内容放在RAMFS(Mac)上会使编译和jrebel重新加载速度明显加快吗?
我的计划是将与项目直接相关的所有内容放在RAMFS分区中(.ivy,项目源,.sbt,甚至可能复制JDK等)。我会创建一个脚本来在启动或手动执行所有这些,这不会是一个问题。此外,我会设置文件同步任务,因此,如果操作系统出现故障,丢失更改将不会成为问题。
更新
我对这些结果非常满意,但仍然对如何更快地进行scala编译感兴趣,因为在编译过程中,CPU使用率最多只需要5秒,需要170秒,编译期间的整体CPU使用率是20%。
更新:
在RAMDISK上放置JVM,source,.ivy2和.sbt文件夹之后,我注意到编译时间只有很小的改进:从132s到122s(干净之后)。所以,不值得麻烦。
注:
这是排除依赖项解析,因为我使用this approach来避免在干净后丢失依赖项解析。
答案 0 :(得分:2)
您可以尝试设置VM参数 -Drebel.check_class_hash = true ,这将在重新加载类之前检查校验和。
答案 1 :(得分:2)
我不知道Mac可以达到什么样的加速,但是我已经看到Linux上的加速编译Scala编译器本身就足够鼓励尝试了。我的报告(警告:非常特定于Linux)是there。
答案 2 :(得分:1)
如果您使用的是Linux或OSX,那么RAM磁盘中通常没有什么意义。无论如何,那些操作系统都会缓存文件。