【问题标题】:How to know if I am using Open JDK or Oracle JDK?如何知道我使用的是 Open JDK 还是 Oracle JDK?
【发布时间】:2015-11-24 13:34:38
【问题描述】:

使用 java -version 给了我这个。

java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)

是 OpenJDK 还是 OracleJDK?

【问题讨论】:

  • 第二行提到“HotSpot”,它是 Oracle VM 的内部名称。因此,它似乎是 OracleJDK。
  • 首先要问自己:你的机器上安装了哪个?
  • 我已经在机器上安装了。它已经在那里了。它是 Oracle JDK。见答案。
  • 如果我同时安装它们会怎样?!这可能是默认用例:我安装两者,在 Oracle 上开发并使用 OpenJDK 发布......现在如何知道我正在构建哪一个? ¯\_(ツ)_/¯

标签: java openjdk jdk1.7 oraclejdk


【解决方案1】:

我认为您正在使用 OracleJDK。

正如我在 google 搜索中看到的,openJDK --version 输出是这样的:

java-版本

openjdk 版本“1.8.0-internal”

OpenJDK 运行时环境(构建 1.8.0-internal-0)

OpenJDK 64 位零虚拟机(构建 25.0-b20-internal,解释模式)

见:http://mail.openjdk.java.net/pipermail/jdk8-dev/2013-July/002840.html

【讨论】:

    【解决方案2】:

    在 debian、jessie-backports、openjdk-8 上:

    openjdk version "1.8.0_66-internal"
    OpenJDK Runtime Environment (build 1.8.0_66-internal-b17)
    OpenJDK 64-Bit Server VM (build 25.66-b17, mixed mode)
    

    为 oracle-java-8 使用 ubuntu ppa:

    java version "1.8.0_66"
    Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
    Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
    

    我假设,开头的字符串“java”表示 Oracle Java,而 OpenJDK 为您提供“openjdk”。

    【讨论】:

      【解决方案3】:

      基于我使用 Oracle JDK 和 OpenJDK 在我的系统上进行的实际测试:

      选项 1

      • 您可以执行java –version 命令,对于OpenJDK,您将在输出中清楚地看到“openjdk”,而对于Oracle JDK,您将在输出中看到“Hotspot”。这就是你可以区分的方式。
      • 以下是我系统中的实际情况:

      C:\Users\himanshu.agrawal>"C:\E_Drive\Softwares\OpenJDK-java-se-7u75-ri\jre\bin\java" -version
      openjdk version "1.7.0_75"
      OpenJDK Runtime Environment (build 1.7.0_75-b13)
      OpenJDK Client VM (build 24.75-b04, mixed mode)
      
      C:\Users\himanshu.agrawal>java -version
      java version "1.8.0_301"
      Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
      Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)
      

      选项 2

      • 您可以使用java.vm.namejava.runtime.name 系统属性。
      • 我认为,由于 Oracle 仍然是 OpenJDK 项目的主要贡献者/负责人,所以如果您使用 java.vm.vendorjava.specification.vendor,您仍然会得到 Oracle 作为供应商。
      • 以下是我的系统针对这些属性的实际输出:

      // when using OpenJDK
      java.vm.name = OpenJDK 64-Bit Server VM
      java.runtime.name = OpenJDK Runtime Environment
      java.vm.vendor = "Oracle Corporation"
      java.specification.vendor = Oracle Corporation
      
      // when using Oracle JDK
      java.vm.name = Java HotSpot(TM) 64-Bit Server VM
      java.runtime.name = Java(TM) SE Runtime Environment
      java.vm.vendor = Oracle Corporation
      java.specification.vendor = Oracle Corporation
      

      【讨论】:

        【解决方案4】:

        在 java 代码中调用 sun.misc.Version#println 会将版本信息转储到 stderr。如果你想从 java 代码中获取 JDK 版本。

        package bj.tmp;
        
        import sun.misc.Version;
        
        public class Foo {
            public static void main(String[] args) {
                Version.println();
            }
        }
        

        像这样:

        java version "1.8.0_192"
        Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
        Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)
        

        【讨论】:

        • sun.misc.Version 似乎不再存在,至少从 JDK 15 开始
        • 对。这本质上是java -version 命令的输出。如果是 OpenJDK,则“openjdk”将在输出中可见。
        猜你喜欢
        • 2017-08-15
        • 2021-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-14
        • 2021-02-06
        • 2012-05-09
        相关资源
        最近更新 更多