jdk/bin/java与jdk/jre/bin/java的区别

jdk/bin/java与jdk/jre/bin/java的区别,java,jvm,Java,Jvm,本周进行了一些测试,我发现了这种情况: 当我使用jdk/jre/bin/java中的java可执行文件运行tomcat时,性能要比使用jdk/bin/java时好得多。 问题是:有人知道为什么jdk包提供了2个java可执行文件,以及它们之间的差异是什么,从而证明了性能差异?java.exe文件实际上是相同的。JDK是Java开发工具包,它包括开发应用程序所需的所有Java可执行文件 JRE是Java运行时环境,其中包括运行Java应用程序所需的内容 因此,要在部署模式下运行应用程序,您只需要J

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

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

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

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


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

我迟到了,但是。。。我来这里是为了寻找OpenJDK中几个
java
变体之间的差异。最后,我只对问题的“它们之间有什么区别”部分作了一些澄清和补充问题;希望对你有帮助

在OpenJDK(我使用的是OpenJDK 1.7.0)基本目录中,我看到三个
java
s,它们都具有不同的哈希和:

  • bin/java
    ,二进制
  • jre-abrt/bin/java
    ,二进制;假设ABRT是
  • jre/bin/java
    ,一个shell脚本,它以两种不同的方式之一执行
    jre abrt/bin/java
    变体(详见下文)
上面的二进制变量具有相同的文件大小和创建时间(无论如何,在我的版本和系统中),但两个文件之间有4个字节不同(我没有看得太多——这是问题的另一部分——但它们不同,例如,它看起来不像ASCII字符串)

脚本变体就是您所说的更快,这似乎违反直觉,因为它似乎做得更多。(或者您可能只看到了执行脚本的时间,而没有看到
exec
'd
java
命令?)。脚本检查ABRT共享对象文件是否存在,如果存在,它将通过
.so
ABRT=on
。再一次,这看起来应该是更多的工作。。。假设使用ABRT

如果您仍然对本主题感兴趣,也许您会对以下内容感兴趣:

  • 您在脚本中采用的路径(检查
    /usr/lib64/libabrt java connector.so
    jre/bin/java
    脚本中的任何内容)
  • 如果直接执行第三个变量(
    jre abrt/bin/java
    ),速度会更快
  • 在这两种情况下还涉及到了什么——比如
    inotify
    strace
    或其他什么,但对于这样的服务来说,这可能是巨大的

您可以分享基准测试吗?他们之间没有区别。JRE是一个运行时环境,只需要运行程序,而不需要额外的实用程序(jstack、jconsole、javah)。JDK bin中的java.exe与JRE binAlso之间的性能不应存在差异,请为每个文件共享java版本(java-version)。我假设你正在运行OpenJDK。文件大小有差异吗?您可能有冲突的JVM抱歉,但我没有基准测试。。。我的问题是基于tomcat的启动时间,使用jdk可执行文件启动需要600.000毫秒,使用jre启动需要160.000毫秒。差别很大。版本是OpenJDK 64位服务器虚拟机(构建24.45-b08,混合模式),这并不能解释为什么JDK版本可能比JRE慢。。。对问题的(真实的)部分有什么想法吗?