java - Unix 排序命令需要更长的时间,具体取决于它在何处执行?! (在从 IDE 运行的程序中 ProcessBuilder 最快,从终端运行最慢)

标签 java performance macos unix sorting

我有一个使用 ProcessBuilder 调用 unix 排序命令的 java 程序。当我在我的 IDE (intelliJ) 中运行此代码时,只需大约一秒钟即可对 500,000 行进行排序。当我将它打包到一个可执行 jar 中并从终端运行它时,大约需要 10 秒。当我自己从终端运行排序命令时,需要 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

请注意,当我从终端运行排序时,我需要手动转义制表符分隔符并使用参数 -t$'\t' 而不是实际的制表符(我可以将其传递给 ProcessBuilder ).

看起来像 ps 一切看起来都一样,除了从 IDE 运行时,sort 命令的 TTY 是 ??而不是 ttys000——而是来自 this question我不认为这应该有所作为。也许 BASH 正在减慢我的速度?我的想法已经用完了,我想缩小这个 20 倍的性能差距!

最佳答案

我将冒险进行两种猜测:

  • 也许您正在调用不同版本的排序(执行 which sort 并使用完整的绝对路径重新比较?)

  • 也许您正在使用更复杂的区域设置(导致更复杂的字符集处理等)?尝试

     export LANG=C
     sort -t'    ' -k5,5f -k4,4f -k1,1n /input/file -o /output/file
    

比较

关于java - Unix 排序命令需要更长的时间,具体取决于它在何处执行?! (在从 IDE 运行的程序中 ProcessBuilder 最快,从终端运行最慢),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7124489/

相关文章:

MYSQL - 在 View 内多次调​​用函数时的性能问题

macos - 具有提升权限的 Mac App Store 应用程序

java - OSX Java 系统托盘(菜单栏)

java - 如何将 Stream<Map<Integer, String>> 转换为映射 java 8

java - "default character encoding"和 "native character encoding"的含义是什么?

performance - 为什么 CUDA 代码在 NVIDIA Visual Profiler 中运行得这么快?

java - 性能:单变量赋值与对象图导航 (Java)

java - org.postgresql.util.PSQLException : The column index is out of range: 2, 列数:1

java - 运行 Java Code 代码时出错(未知字符集 : 'utf8mb4' )?

macos - Mac OSX 编程长期 Linux 极客