10

本周进行一些测试我发现了这种情况:

当我使用 jdk/jre/bin/java 中的 java 可执行文件运行 tomcat 时,性能比使用 jdk/bin/java 运行时要好很多。问题是:有人知道为什么 jdk 包提供了 2 个 java 可执行文件,它们之间有什么区别可以证明性能差异是合理的?

4

2 回答 2

10

我迟到了,但是……我来这里是为了寻找javaOpenJDK 中几个变体之间的区别。我只对问题的“它们之间有什么区别”部分进行了一些澄清和附加问题;希望它有帮助。

查看 OpenJDK(我使用的是 OpenJDK 1.7.0)基本目录,我看到三个 javas,都具有不同的哈希和:

  • bin/java, 二进制
  • jre-abrt/bin/java, 二进制; 假设 ABRT 是自动错误报告工具
  • jre/bin/javaexec,一个作为变体的 shell 脚本,jre-abrt/bin/java以两种不同的方式之一(更多见下文)。

上面的二进制变体具有相同的文件大小和创建时间(无论如何在我的版本和系统中),但两个文件之间有 4 个字节不同(我没有进一步研究——这是你问题的另一部分—— - 但它们不同的,例如,它看起来不像 ASCII 字符串)。

脚本变体是您所说的更快,这似乎违反直觉,因为它似乎做得更多。(或者也许您只看到执行脚本的时间而不是exec'djava命令?)。该脚本检查是否存在 ABRT 共享对象文件,如果存在,则通过 (as -agentpath...).soabrt=on. 同样,这似乎只是更多的工作......假设使用 ABRT。

如果您仍然对这个主题感兴趣,那么看看以下内容可能会很有趣:

  • 您在该脚本中采用什么路径(检查脚本中是否存在/usr/lib64/libabrt-java-connector.so或任何内容jre/bin/java
  • 如果直接执行第三个变体 ( jre-abrt/bin/java) 更快
  • 在这两种情况下还涉及到什么——比如inotifystrace什么,但这对于这样的服务来说可能是巨大的。
于 2014-04-23T18:38:18.977 回答
4

java.exe 文件实际上是相同的。JDK 是 Java 开发工具包,其中包括开发应用程序所需的所有 Java 可执行文件。

JRE 是 Java 运行时环境,其中包括运行 Java 应用程序所需的内容

因此,要在部署模式下运行应用程序,您只需要 JRE,因为最终用户可能只有 JRE 而没有 JDK。

于 2013-10-31T15:11:41.307 回答