目录
windows 系统的 cmd 命令行工具;
linux 或 macos 的 terminal 终端;
java -version
[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)的版本信息.
[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 实现.
百度百科上关于 openjdk 的说明:
sun 发布的 openjdk 是一款只能运行在 i386 和 amd-64 机器上的软件。
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 二进制代码许可协议获得许可.
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 是一致的.
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.
openjdk 采用gpl v2协议放出, 而 oracle jdk 则采用 jrl(java research license, java研究授权协议) 放出. 两种者虽然都是开放源代码的, 但在使用上却要注意:
gpl v2允许在商业上使用;
jrl 只允许个人研究使用, 要获得 oracle jdk 的商业许可证, 请联系 oracle 的销售人员.
部署的功能包括: browser plugin、java web start、java mission control, 这些功能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://stackoverflow.com/questions/22358071/differences-between-oracle-jdk-and-openjdk
版权声明
作者: ma_shoufeng(马瘦风)
出处: 博客园
您的支持是对博主的极大鼓励, 感谢您的阅读.
本文版权归博主所有, 欢迎转载, 但未经博主同意必须保留此段声明, 且在文章页面明显位置给出原文链接, 否则博主保留追究法律责任的权利.
如对本文有疑问, 点击进行留言回复!!
NullPointerException: Attempt to invoke virtual method ‘android.content.res.XmlResourceParser androi
关于启动appium-desktop,报错:Cannot extract apk info using apkanalyzer. Falling back to aapt. Original ....
Gradle 发布共享库——如何通过Gradle发布Android依赖库(aar)到 jitpack 公共仓库
Gradle 发布共享库——如何通过Gradle发布java依赖库(jar)到 jitpack 公共仓库(—)
网友评论