Наша сборка раздражающе медленная. Это система Java, созданная с помощью Ant, и я запускаю свою на Windows XP. В зависимости от аппаратного обеспечения это может занять от 5 до 15 минут.
Наблюдение за общими показателями производительности на машине, а также сопоставление аппаратных различий со временем сборки указывает на то, что процесс связан с вводом-выводом. Это также показывает, что процесс намного больше читает, чем пишет.
Однако я не нашел хорошего способа определить, какие файлы читаются или записываются и сколько раз. Я подозреваю, что с нашими многочисленными подпроектами и последующими вызовами компилятора сборка многократно перечитывает одни и те же часто используемые библиотеки.
Какие есть инструменты профилирования, которые сообщат мне, что данный процесс делает с какими файлами? Бесплатно это хорошо, но не обязательно.
Используя Process Monitor, предложенный Джоном Скитом, я смог подтвердить мое подозрение: почти вся активность диска заключалась в чтении и повторном чтении библиотек, причем копии JDK "rt.jar" и других библиотек находились вверху списка. Я не могу сделать RAM-диск достаточно большим, чтобы вместить все библиотеки, которые я использовал, но установка «горячих» библиотек на RAM-диск сократила время сборки примерно на 40%; ясно, что кэширование файловой системы Windows недостаточно хорошо справляется со своей задачей, даже несмотря на то, что я сказал Windows оптимизировать для этого.
Одна интересная вещь, которую я заметил, заключается в том, что типичная операция «чтения» в JAR файл всего несколько десятков байт; обычно их два или три, за которыми следует пропуск на несколько килобайт дальше в файле. Оказалось, что он не подходит для массового чтения.
Я собираюсь провести дополнительное тестирование всех моих сторонних библиотек на флэш-накопителе и посмотреть, как это повлияет.