GCC или Javac медленно при первом запуске - PullRequest
1 голос
/ 18 октября 2011

Может кто-нибудь объяснить, почему в Linux, когда я запускаю gcc или javac после некоторого времени бездействия, им требуется время для запуска.Последующие вызовы намного быстрее.Есть ли способ обеспечить быстрый запуск всегда?(Это требование может показаться странным, но в моем случае это необходимо).Ubuntu, кстати.

1 Ответ

2 голосов
/ 18 октября 2011

Скорее всего, это время, необходимое для сбоя кодовых страниц. Есть несколько способов избежать этой задержки, если это действительно необходимо.Самое простое - периодически запускать 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 который сделал что-то подобное.Если по какой-то причине ваша платформа поддерживает это, просто установите его для всех используемых файлов.(Хотя это традиционно приводило к тому, что файлы сохранялись в режиме подкачки, что в современной системе не ускоряет процесс.)

...