У меня есть Java-программа, которая использует ProcessBuilder для вызова команды сортировки Unix. Когда я запускаю этот код в своей среде IDE (intelliJ), для сортировки 500 000 строк требуется всего около секунды. Когда я упаковываю его в исполняемый файл jar и запускаю его из терминала, это занимает около 10 секунд. Когда я сам запускаю команду сортировки из терминала, это занимает 20 секунд!
Почему огромная разница в производительности и как я могу заставить jar работать с той же производительностью? Средой является OSX 10.6.8 и Java 1.6.0_26. В нижней части справочной страницы сортировки написано "сортировка 5.93 Ноябрь 2004"
Команда, которую она выполняет:
sort -t' ' -k5,5f -k4,4f -k1,1n /path/to/imput/file -o /path/to/output/file
Обратите внимание, что когда я запускаю сортировку из терминала, мне нужно вручную экранировать символ табуляции и использовать аргумент -t$'\t'
вместо реальной вкладки (которую я могу передать ProcessBuilder).
Выглядит как ps
Все выглядит одинаково, за исключением того, что при запуске из IDE команда сортировки имеет TTY ?? вместо ttys000 - но с этот вопрос Я не думаю, что это должно иметь значение. Возможно, BASH замедляет меня? У меня заканчиваются идеи и я хочу сократить этот 20-кратный разрыв в производительности!