本周进行一些测试我发现了这种情况:
当我使用 jdk/jre/bin/java 中的 java 可执行文件运行 tomcat 时,性能比使用 jdk/bin/java 运行时要好很多。问题是:有人知道为什么 jdk 包提供了 2 个 java 可执行文件,它们之间有什么区别可以证明性能差异是合理的?
我迟到了,但是……我来这里是为了寻找java
OpenJDK 中几个变体之间的区别。我只对问题的“它们之间有什么区别”部分进行了一些澄清和附加问题;希望它有帮助。
查看 OpenJDK(我使用的是 OpenJDK 1.7.0)基本目录,我看到三个 java
s,都具有不同的哈希和:
bin/java
, 二进制 jre-abrt/bin/java
, 二进制; 假设 ABRT 是自动错误报告工具 jre/bin/java
exec
,一个作为变体的 shell 脚本,jre-abrt/bin/java
以两种不同的方式之一(更多见下文)。上面的二进制变体具有相同的文件大小和创建时间(无论如何在我的版本和系统中),但两个文件之间有 4 个字节不同(我没有进一步研究——这是你问题的另一部分—— - 但它们是不同的,例如,它看起来不像 ASCII 字符串)。
脚本变体是您所说的更快,这似乎违反直觉,因为它似乎做得更多。(或者也许您只看到执行脚本的时间而不是exec
'djava
命令?)。该脚本检查是否存在 ABRT 共享对象文件,如果存在,则通过 (as -agentpath...
).so
和abrt=on
. 同样,这似乎只是更多的工作......假设使用 ABRT。
如果您仍然对这个主题感兴趣,那么看看以下内容可能会很有趣:
/usr/lib64/libabrt-java-connector.so
或任何内容jre/bin/java
)jre-abrt/bin/java
) 更快inotify
或strace
什么,但这对于这样的服务来说可能是巨大的。java.exe 文件实际上是相同的。JDK 是 Java 开发工具包,其中包括开发应用程序所需的所有 Java 可执行文件。
JRE 是 Java 运行时环境,其中包括运行 Java 应用程序所需的内容
因此,要在部署模式下运行应用程序,您只需要 JRE,因为最终用户可能只有 JRE 而没有 JDK。