如何知道我使用的是 Open JDK 还是 Oracle JDK?
How to know if I am using Open JDK or Oracle JDK?
使用 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?
我认为您使用的是 OracleJDK。
正如我在 google 搜索中看到的,openJDK --version 输出是这样的:
java -version
openjdk version "1.8.0-internal"
OpenJDK Runtime Environment (build 1.8.0-internal-0)
OpenJDK 64-Bit Zero VM (build 25.0-b20-internal, interpreted mode)
参见:http://mail.openjdk.java.net/pipermail/jdk8-dev/2013-July/002840.html
在 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)
将 ubuntu ppa 用于 oracle-java-8:
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".
在 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)
基于我在系统上使用 Oracle JDK 和 OpenJDK 进行的实际测试:
选项 1
- 你可以执行
java –version
命令,如果是OpenJDK,你会在输出中清楚地看到“openjdk”,而如果是Oracle JDK,你会看到“热点”在输出中。这就是您可以区分的方式。
- 以下是我系统的实际情况:
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.name
或java.runtime.name
系统属性。
- 我认为,由于 Oracle 仍然是 OpenJDK 项目的主要贡献者/负责人,因此如果您使用
java.vm.vendor
或 java.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
使用 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?
我认为您使用的是 OracleJDK。
正如我在 google 搜索中看到的,openJDK --version 输出是这样的:
java -version
openjdk version "1.8.0-internal"
OpenJDK Runtime Environment (build 1.8.0-internal-0)
OpenJDK 64-Bit Zero VM (build 25.0-b20-internal, interpreted mode)
参见:http://mail.openjdk.java.net/pipermail/jdk8-dev/2013-July/002840.html
在 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)
将 ubuntu ppa 用于 oracle-java-8:
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".
在 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)
基于我在系统上使用 Oracle JDK 和 OpenJDK 进行的实际测试:
选项 1
- 你可以执行
java –version
命令,如果是OpenJDK,你会在输出中清楚地看到“openjdk”,而如果是Oracle JDK,你会看到“热点”在输出中。这就是您可以区分的方式。 - 以下是我系统的实际情况:
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.name
或java.runtime.name
系统属性。 - 我认为,由于 Oracle 仍然是 OpenJDK 项目的主要贡献者/负责人,因此如果您使用
java.vm.vendor
或java.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