本周进行了一些测试,我发现了这种情况:
当我使用jdk/jre/bin/java中的java可执行文件运行tomcat时,性能比使用jdk/bin/java运行要好得多。 问题是:有人知道为什么jdk软件包提供2个java可执行文件,它们之间的区别是什么,这可以解释性能差异吗?
本周进行了一些测试,我发现了这种情况:
当我使用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 是 自动错误报告工具jre/bin/java
,一个 shell 脚本,它以两种不同的方式之一 exec
执行 jre-abrt/bin/java
变体(更多内容见下文)。上述二进制变体在我的版本和系统中具有相同的文件大小和创建时间,但两个文件之间有 4 个字节不同(我没有深入研究——这是你问题的另一部分——但它们确实不同,而且看起来不像是 ASCII 字符串,例如)。
你称脚本变体比较快,这似乎是违反直觉的,因为它似乎正在做更多的工作。(或者也许你只看到了执行脚本的时间,而没有看到 exec
的 java
命令的时间?)该脚本检查是否存在 ABRT 共享对象文件,如果存在,则将其(作为 -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。