Вы вряд ли сможете снизить нагрузку на процессор для своей задачи, особенно в системе Windows. Java в Linux поддерживает асинхронный файловый ввод / вывод, однако это может серьезно усложнить ваш код. Я подозреваю, что вы работаете в Windows, поскольку файловый ввод-вывод обычно занимает гораздо больше времени в Windows, чем в Linux. Я даже слышал об улучшениях при запуске Java на виртуальной машине Linux под Windows.
Посмотрите в диспетчере задач, когда процесс запущен, и включите Показать время ядра . Время, затрачиваемое ЦП в пользовательском пространстве, обычно можно оптимизировать, но время ЦП в пространстве ядра обычно можно уменьшить только путем более эффективных вызовов.
JSR 203 специально обращается к необходимости асинхронного, мультиплексированного ввода-вывода файла разброса / сбора:
Мультиплексное неблокирующее средство, представленное JSR-51, решило большую часть этой проблемы для сетевых сокетов, но не для операций с файловой системой.
Пока JSR-203 не станет частью Java, вы можете получить настоящий асинхронный ввод-вывод с помощью Apache MINA проекта для Linux.
Java NIO (1) позволяет выполнять ввод-вывод на основе каналов. Это улучшение производительности, но вы выполняете только буфер данных за раз, а не истинный асинхронный и мультиплексированный ввод-вывод.