从RAM磁盘运行所有内容会加快scala编译时间吗?

时间:2012-11-24 18:16:29

标签: scala jvm sbt jrebel

情景:

我用于开发的机器有32Gb的DDR3内存,i7 3770,SSD。项目很大,Scala在增量编译期间大部分时间编译很快,但有时一次更改会导致重新编译数百个文件,然后需要一些时间来编译所有和jrebel重新加载所有已更改文件的好时机。

问题:

将所有内容放在RAMFS(Mac)上会使编译和jrebel重新加载速度明显加快吗?

我的计划是将与项目直接相关的所有内容放在RAMFS分区中(.ivy,项目源,.sbt,甚至可能复制JDK等)。我会创建一个脚本来在启动或手动执行所有这些,这不会是一个问题。此外,我会设置文件同步任务,因此,如果操作系统出现故障,丢失更改将不会成为问题。

更新

  1. log表示java和scala源中的大约400个是在干净后编译的。
  2. 更改核心模块中的文件后,它会在50秒内重新编译130个文件。
  3. jrebel需要72秒才能在#1
  4. 之后重新加载#1和50s
  5. 添加-Drebel.check_class_hash = true使jrebel在#2后立即重新加载。
  6. 我对这些结果非常满意,但仍然对如何更快地进行scala编译感兴趣,因为在编译过程中,CPU使用率最多只需要5秒,需要170秒,编译期间的整体CPU使用率是20%。

    更新:

    在RAMDISK上放置JVM,source,.ivy2和.sbt文件夹之后,我注意到编译时间只有很小的改进:从132s到122s(干净之后)。所以,不值得麻烦。

    注:

    这是排除依赖项解析,因为我使用this approach来避免在干净后丢失依赖项解析。

3 个答案:

答案 0 :(得分:2)

您可以尝试设置VM参数 -Drebel.check_class_hash = true ,这将在重新加载类之前检查校验和。

答案 1 :(得分:2)

我不知道Mac可以达到什么样的加速,但是我已经看到Linux上的加速编译Scala编译器本身就足够鼓励尝试了。我的报告(警告:非常特定于Linux)是there

答案 2 :(得分:1)

如果您使用的是Linux或OSX,那么RAM磁盘中通常没有什么意义。无论如何,那些操作系统都会缓存文件。

https://unix.stackexchange.com/a/66402/141286