欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

你安装的是 SUN/Oracle JDK 还是 OpenJDK ?

程序员文章站 2022-07-02 14:37:49
你安装的是 SUN/Oracle JDK 还是 OpenJDK? 还傻傻分不清楚吗? 快来看看这篇吧...

目录

1 如何查看你安装的 jdk 版本

1.1 要用到的命令行工具

windows 系统的 cmd 命令行工具;

linux 或 macos 的 terminal 终端;

1.2 查看的命令

java -version

1.2.2 如果是 sun/oraclejdk, 显示信息为:

[root@localhost ~]# java -version
java version "1.8.0_162"
java(tm) se runtime environment (build 1.8.0_162-b12)
java hotspot(tm) 64-bit server vm (build 25.162-b12, mixed mode)
  • 说明:

    java hotspot(tm) 64-bit server vm 表明, 此 jdk 的 jvm 是 oracle 的 64位 hotspot 虚拟机, 运行在 server 模式下(虚拟机有 server 和 client 两种运行模式).

    java(tm) se runtime environment (build 1.8.0_162-b12) 是 java 运行时环境(即 jre)的版本信息.

1.2.1 如果 openjdk, 显示信息为:

[root@localhost ~]# java -version
openjdk version "1.8.0_144"
openjdk runtime environment (build 1.8.0_144-b01)
openjdk 64-bit server vm (build 25.144-b01, mixed mode)

ps. 主要的 linux 发行版(如ubuntu, fedora 和 red hat enterprise linux) 提供 openjdk 或其变体作为其默认的 java se 实现.

2 什么是 openjdk

百度百科上关于 openjdk 的说明:

sun 发布的 openjdk 是一款只能运行在 i386 和 amd-64 机器上的软件。

2.1 openjdk 的来历

java 由 sun 公司发明, 在2006年 sun 公司将 java 开源, 此时的 jdk 即为 openjdk.

也就是说, openjdk 是 java se 的开源实现, 它由 sun 和 java 社区提供支持, 2009年 oracle 收购了 sun 公司, 自此 java 的维护方之一的 sun 也变成了 oracle .

大多数 jdk 都是在 openjdk 的基础上编写实现的, 比如 ibm j9, azul zulu, azul zing 和 oracle jdk. 几乎现有的所有 jdk 都派生自 openjdk, 它们之间不同的是许可证:

openjdk 根据许可证 gpl v2 发布;

oracle jdk 根据 oracle 二进制代码许可协议获得许可.

2.2 oracle jdk 的来历

oracle jdk 之前被称为 sun jdk, 这是在2009年 oracle 收购 sun 公司之前, 收购后被命名为 oracle jdk.

实际上, oracle jdk 是基于 openjdk 源代码构建的, 因此oracle jdk 和 openjdk 之间没有重大的技术差异.

oracle的项目发布经理 joe darcy 在 oscon 2011 上对两者关系的介绍也证实了 openjdk 7 和oracle jdk 7 在程序上是非常接近的, 两者共用了大量相同的代码(如下图), 注意: 图中提示了两者共同代码的占比要远高于图形上看到的比例, 所以我们编译的openjdk 基本上可以认为性能、功能和执行逻辑上都和官方的 oracle jdk 是一致的.

你安装的是 SUN/Oracle JDK 还是 OpenJDK ?

3 oracle jdk 与 openjdk 的区别

3.1 主要不同

openjdk font renderer(字体栅格化引擎) 和 oracle jdk flight recorder(飞行记录仪) 是 oracle jdk 和 openjdk 之间明显的主要区别. —— 存疑, 尚未求证.

openjdk 使用的是开源免费的 freetype, 可以按照 gpl v2 许可证使用.

oracle jdk 采用了商业实现, 其中的flight recorder 和 missioncontrol 都是从 jrockit 中改造而来的.

jrockit 是 oracle 的 jvm, 从 java se 7开始, hotspot 和 jrockit合并为一个jvm.

3.2 授权协议的不同

openjdk 采用gpl v2协议放出, 而 oracle jdk 则采用 jrl(java research license, java研究授权协议) 放出. 两种者虽然都是开放源代码的, 但在使用上却要注意:

gpl v2允许在商业上使用;

jrl 只允许个人研究使用, 要获得 oracle jdk 的商业许可证, 请联系 oracle 的销售人员.

3.3 openjdk 不包含 deployment 功能

部署的功能包括: browser plugin、java web start、java mission control, 这些功能openjdk 是没有的.

3.4 openjdk 源码不完整

在采用 gpl 协议的 openjdk 中, sun jdk 的一部分源码因为产权问题无法提供给 openjdk 使用, 其中最主要的是 jmx 中的可选元件 snmp 部份的代码, 因此这些不能开放的源码将它作成plug, 以供 openjdk 编译时使用.

参考:

https://blog.csdn.net/sinat_38259539/article/details/78114983

https://javapapers.com/java/oracle-jdk-vs-openjdk-and-java-jdk-development-process/

https://*.com/questions/22358071/differences-between-oracle-jdk-and-openjdk

版权声明

作者: ma_shoufeng(马瘦风)

出处: 博客园

您的支持是对博主的极大鼓励, 感谢您的阅读.

本文版权归博主所有, 欢迎转载, 但未经博主同意必须保留此段声明, 且在文章页面明显位置给出原文链接, 否则博主保留追究法律责任的权利.