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