java - jdk/bin/java 和 jdk/jre/bin/java 的区别

标签 java jvm

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

当我使用 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 是 Automatic Bug Reporting Tool
  • jre/bin/java,一个 shell 脚本,execjre-abrt/bin/java 变体,在两个之一中不同的方式(更多内容见下文)。

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

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

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

  • 您在该脚本中采用的路径(检查是否存在 /usr/lib64/libabrt-java-connector.so 或您的 jre/bin/java< 中的任何内容 脚本)
  • 如果直接执行第三个变体(jre-abrt/bin/java)更快
  • 在这两种情况下还触及了什么——比如 inotifystrace 或其他东西,但这对于像这样的服务来说可能是巨大的。

关于java - jdk/bin/java 和 jdk/jre/bin/java 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19710034/

相关文章:

java - 如何将数组字节转换为 org.w3c.dom.Document

java - 应用程序在几秒钟的闪屏后将一个 Activity 移动到另一个 Activity 时崩溃

java - 我们可以查看JVM内存中的对象吗?

java - 是否有一个库函数可以为我提供变量中的当前日期并查找自给定日期以来经过的天数

java - 如何在操作栏中的图标和标题之间留出空间?

java - 监控 Spring Java 应用程序

java - 缺少 `server' JVM (Java\jre7\bin\server\jvm.dll。)

java - 有没有办法有选择地调试 JVM 中的单个应用程序(或几个应用程序)?

java - args[] 在整个 jvm 生命周期中都可用吗?

java - 为什么大多数 JVM gc 不使用引用计数?