这周做了一些测试,我发现了这种情况:
当我使用 jdk/jre/bin/java 中的 java 可执行文件运行 tomcat 时,性能比我使用 jdk/bin/java 运行时要好得多。 问题是:有人知道为什么 jdk 包提供 2 个 java 可执行文件,以及它们之间有什么区别可以证明性能差异?
最佳答案
我来晚了,但是...我来这里是为了寻找 OpenJDK 中几个 java
变体之间的区别。最后,我只对问题的“它们之间有什么区别”部分进行了一些澄清和其他问题;希望对您有所帮助。
查看 OpenJDK(我使用的是 OpenJDK 1.7.0)基本目录,我看到三个 java
,它们都具有不同的哈希和:
bin/java
, 二进制jre-abrt/bin/java
,二进制;假设 ABRT 是 Automatic Bug Reporting Tooljre/bin/java
,一个 shell 脚本,exec
是jre-abrt/bin/java
变体,在两个之一中不同的方式(更多内容见下文)。
上面的二进制变体具有相同的文件大小和创建时间(无论如何在我的版本和系统中),但两个文件之间有 4 个字节的差异(我没有进一步查看 - 这是 您问题的其他部分 -- 但它们不同,例如,它看起来不像 ASCII 字符串)。
您所说的脚本变体更快,这似乎违反直觉,因为它似乎做得更多。 (或者您可能只看到执行脚本的时间,而不是 exec
的 java
命令?)。该脚本检查是否存在 ABRT 共享对象文件,如果存在,它传递(作为 -agentpath...
).so
和 abrt=在
。同样,这似乎只是更多 工作...假设使用 ABRT。
如果您仍然对这个主题感兴趣,也许看到以下内容会很有趣:
- 您在该脚本中采用的路径(检查是否存在
/usr/lib64/libabrt-java-connector.so
或您的jre/bin/java< 中的任何内容
脚本) - 如果直接执行第三个变体(
jre-abrt/bin/java
)更快 - 在这两种情况下还触及了什么——比如
inotify
或strace
或其他东西,但这对于像这样的服务来说可能是巨大的。
关于java - jdk/bin/java 和 jdk/jre/bin/java 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19710034/