jdk / bin / java和jdk / jre / bin / java之间的区别

时间:2013-10-31 15:04:48

标签: java jvm

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

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

2 个答案:

答案 0 :(得分:10)

我迟到了,但是......我来到这里寻找OpenJDK中几个java变体之间的区别。我最后只得到了一些澄清和其他问题,以解决“他们之间有什么区别”问题的一部分;希望它有用。

查看OpenJDK(我正在使用OpenJDK 1.7.0)基本目录,我看到三个 java,所有这些都有不同的哈希值:

  • bin/java,二进制
  • jre-abrt/bin/java,二进制;假设ABRT为Automatic Bug Reporting Tool
  • jre/bin/javaexec jre-abrt/bin/java变体的shell脚本,有两种不同的方式(下面更多)。

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

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

如果您仍然对此主题感兴趣,或许看到以下内容会很有趣:

  • 您正在使用的脚本中的路径(检查/usr/lib64/libabrt-java-connector.sojre/bin/java脚本中是否存在)
  • 如果直接执行第三个变体(jre-abrt/bin/java)更快
  • 在这两种情况下还有其他措施 - 例如inotifystrace或其他什么,但这对于像这样的服务来说可能是巨大的。

答案 1 :(得分:3)

java.exe文件实际上是相同的。 JDK是Java Development Kit,它包含开发应用程序所需的所有Java可执行文件。

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

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