Команда сортировки Unix занимает намного больше времени в зависимости от того, где она выполняется ?! (самый быстрый из ProcessBuilder при запуске программы из IDE, самый медленный из терминала)

, у меня есть java-программа, которая использует ProcessBuilder для вызова команды сортировки unix. Когда я запускаю этот код в своей IDE (intelliJ), сортировка 500 000 строк занимает около секунды. Когда я упаковываю его в исполняемую банку и запускаю с терминала, это занимает около 10 секунд. Когда я сам запускаю команду sort с терминала, это занимает 20 секунд!

Почему такая огромная разница в производительности и каким образом я могу заставить jar-файл работать с той же производительностью? Среда - OSX 10.6.8 и java 1.6.0_26. Внизу страницы руководства по сортировке написано «sort 5.93 November 2004»

Выполняемая команда:

sort -t'    ' -k5,5f -k4,4f -k1,1n /path/to/imput/file -o /path/to/output/file

Обратите внимание, что когда я запускаю sort с терминала, мне нужно вручную избежать разделителя табуляции и использовать аргумент -t $ '\ t' вместо фактической вкладки (которую я могу передать в ProcessBuilder).

В виде ps все выглядит так же, за исключением того, что при запуске из IDE команда сортировки имеет телетайп ?? вместо ttys000 - но из этого вопроса я не думаю, что это должно иметь значение. Может, BASH меня тормозит? У меня заканчиваются идеи, и я хочу сократить этот 20-кратный разрыв в производительности!

7
задан Community 23 May 2017 в 10:31
поделиться