gcc或javac在首次启动时变慢

时间:2011-10-17 20:25:27

标签: gcc javac

任何人都可以解释为什么在Linux中我在一段时间不活动后启动gcc或javac时需要一段时间才能启动它们。后续调用更快。有没有办法确保快速启动? (这个要求可能看起来很奇怪,但在我的情况下是必要的)。顺便说一下Ubuntu。

1 个答案:

答案 0 :(得分:2)

最有可能的是,这是代码页故障所需的时间。如果你真的需要,有几种方法可以避免这种延迟。最简单的是定期运行gcc。另一种方法是将gcc安装到RAM磁盘上。

另一种方法是列出涉及哪些文件的列表,然后编写一个简单的程序将所有这些文件锁定到内存中。您可以使用以下内容:
strace -f gcc *rest of gcc command* 2>&1 | grep open | grep -v -- -1
使用GCC命令行,这是您使用GCC的典型方式。

你会发现在那里打开了库和二进制文件。在文件中创建完整列表。然后编写一个调用mlockall(MCL_FUTURE)的程序,然后从文件中读取文件名。对于每个文件,mmap将其存入内存并读取每个字节。然后让程序永远睡眠(或直到被杀)。

这将强制每个文件的每个页面都在内存中。您应该检查所有这些文件的总大小,并确保它不是您实际拥有的内存量的重要部分!

顺便说一下,曾经有一种名为sticky bit的东西就是这样做的。如果你的平台有可能支持它,只需在所有使用的文件上设置它。 (虽然它传统上导致文件被保存为交换,但在现代系统中,这不会使事情变得更快。)