区分oracle和ibm jdk,比较一下 Oracle JDK与openJDK的区别_倪闻天的博客-程序员资料

技术标签: 区分oracle和ibm jdk  

写在前面

简单记录学习,两者的区别,没有太多技术含量,倒是花了不少心思总结,欢迎关注,点赞哈

这里先贴图历史版本新增特性

f8473d6a63ca6ff19865de46d1648684.png

这里引用参考下,这篇大佬文章,链接在此,Oracle与OpenJDK之间的区别

他是从组织、开源、市场等角度比较的,我这里主要从开源、前景、相关源码底层…等等角度分析,有兴趣的朋友可以一起来建议,学习

一、前景

这里我只能抛出几个疑问点,欢迎大家一起来解决,抛出疑问

1、为什么 Docker 容器的Java环境,几乎都是 openJdk ?

2、其实ORACLE jdk是开放了大部分源码的,openJDK是开放所有源码的,迄今我所想看到的实现,在Oracle JDK中都是开放源码的,Oracle JDK没有开放的部分在哪里?

答:已解决,Oracle JDK 没有开放的源码,在openJDK中的实现,这里先说明一下,OracleJDK只开放了不到7%,后面我会摘录部分,只是部分哈,有兴趣可以安装一个OpenJDK比较一下区别

3、为什么 OpenJDK开源了 OracleJDK不想开源的东西,

二、开源

open-source,开源,这是一种共享,集智的概念

openJDK 是对外开放源码的,Oracle JDK则没有(部分开源)

三、相关底层架构,实现比较

这里就windows版本分析

3.1-1、Oracle JDK架构1

安装包就一个,如图,官网地址

d77b1ccfa7b164c918470b99d741865c.png

3.1-2、Open JDK架构1

链接地址,在此

如下图

7381f1d884024d4bfdb972341b477796.png

这里比较出 openJDK的JRE和JDK是分开放的

3.2 Oracle JDK 与 Open JDK 目录结构比较

e62a08060c8b6357b3e1d1dbe6c7a317.png

这里看得出 Oracle JDK 是基于 SDK(Jar)进行版本的维护的,部分提供了源码集

OpenJDK 是基于 package 进行版本维护,提供了所有的源码集,目录更清晰,部分实现还变更于与Oracle JDK 不同的包下,后面我摘出部分事例参考

还要注意 IntelliJ IDEA 中也集成了部分的 SDK,注意开发时确保正确的开发环境

3.3 JVM

openJDK已经不显示 JVM了

25c272e2adf36a5c6334b9fe87a08c6a.png

3.4 不同的命令行操作

afbf09e2274f26de63564bee26b152db.png

四、常用对象的不同的实现(OracleJDK源码在OpenJDK中的不同实现)

摘录部分,常用对象,这里总结会有点乱(我还没仔细地观察真正的源码区别)

4.1、Object

d2917a760b13cef527cc997f1a2f1d4d.png

4.2、ArrayList

oracleJDK

package java.util;

import java.util.function.Consumer;

import java.util.function.Predicate;

import java.util.function.UnaryOperator;

import sun.misc.SharedSecrets;

/** * * Java Collections Framework. * * @author Josh Bloch * @author Neal Gafter * @see Collection * @see List * @see LinkedList * @see Vector * @since 1.2 */

public class ArrayList extends AbstractList

implements List, RandomAccess, Cloneable, java.io.Serializable

{.....}

openJDK

package java.util;

import java.util.function.Consumer;

import java.util.function.Predicate;

import java.util.function.UnaryOperator;

import jdk.internal.misc.SharedSecrets;

/** *

This class is a member of the * * Java Collections Framework. * * @param the type of elements in this list * * @author Josh Bloch * @author Neal Gafter * @see Collection * @see List * @see LinkedList * @see Vector * @since 1.2 */

public class ArrayList extends AbstractList

implements List, RandomAccess, Cloneable, java.io.Serializable

{...}

五、OracleJDK中未开源的部分

其实Oracle JDK差不多只开源了 7%左右,只是 rt.jar中的部分实现开源了,还有 23 个 Jar 没有开源,关于 OpenJDK中的实现

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_35137190/article/details/116348607

智能推荐

使用事件驱动模型实现高效稳定的网络服务器程序_FishBear_move_on的博客-程序员资料

http://www.cnblogs.com/hnrainll/p/3625597.html前言事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞 吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力

拓端tecdat|R语言和Stan,JAGS:用rstan,rjags建立贝叶斯多元线性回归预测选举数据_拓端研究室的博客-程序员资料

原文链接:http://tecdat.cn/?p=21978本文将介绍如何在R中用rstan和rjags做贝叶斯回归分析,R中有不少包可以用来做贝叶斯回归分析,比如最早的(同时也是参考文献和例子最多的)R2WinBUGS包。这个包会调用WinBUGS软件来拟合模型,后来的JAGS软件也使用与之类似的算法来做贝叶斯分析。然而JAGS的自由度更大,扩展性也更好。近来,STAN和它对应的R包rstan一起进入了人们的视线。STAN使用的算法与WinBUGS和JAGS不同,它改用了一种更强大的算法使它能..

Linux通过lftp访问sftp服务器_lftp 登录sftp_RayBreslin的博客-程序员资料

1.安装yum -y install lftp2.等陆实例lftp sftp://username:[email protected]:22关键:username:用户名password:密码ip:sftp服务器ip22:默认的端口号3.lftp常用的命令:ls显示远端文件列表(!ls 显示本地文件列表)。cd切换远端目录(lcd 切换本地目录)。get下载远端文件。mget下载远端文件(可以用通配符也就是 *)。pget使用多个线程来下...

FocusScope学习二: 很好的理解FocusScope的工作原理_firstfocusscope_PunCha的博客-程序员资料

http://www.codeproject.com/Articles/38507/Using-the-WPF-FocusScopeIntroductionOften, it is useful to maintain a separate focus for different parts of the user interface. For example, when yo

POJ1511 Invitation Cards [最短路,dijstra+heap,spfa]_aszxqw的博客-程序员资料

题意:给定节点数n,和边数m,边是单向边.问从1节点出发到2,3,...n 这些节点路程和从从这些节点回来到节点1的路程和最小值。思路:很显然的最短路,先以1为起点进行一次最短路,然后再将边反向一下再以1为起点进行一下最短路。这题的意义在于数据,一般的dijstra的O(N^2)显然没法过。先用dijstra+heap试试。(以前被这个heap唬到了,其实heap直接用pr

freeradius-aka配置笔记,自用_三叶星云的博客-程序员资料

Freeradius-server-2.1.11-aka 说明文档1freeradius1.1安装cd freeradius-akatar zxvf freeradius-server-2.1.11-AKA-2011-9-28.tar.gzcd f

随便推点

字符编码ANSI和ASCII区别、Unicode和UTF-8区别_nudt_qxx的博客-程序员资料

今天看了一个说法,说是入坑windows程序开发,必先掌握文字的编码和字符集知识。本博客就整理下信息存储和字符编码的相关知识。 一.位: 计算机存储信息的最小单位,称之为位(bit),音译比特,二进制的一个“0”或一个“1”叫一位。 二.字节 字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位,8个二进制位组成1个字节。在ASCII码中,一个标准

Vue配置TinyMCE富文本编辑器 + 图片(本地)上传到服务器_韩旭在努力的博客-程序员资料

一、TinyMCE是什么?TinyMCE是一款易用、且功能强大的所见即所得的富文本编辑器。同类程序有:UEditor、Kindeditor、Simditor、CKEditor、wangEditor、Suneditor、froala等等。我们可以先大体看一下配置完成后的样子注:博主使用的TinyMCE版本是 “tinymce”: “^4.8.2” 如果超过此版本可能会导致一些问题。首先如果想要在Vue中使用TinyMCE,我们需要准备一些什么?汉化的中文语言包:zh_CN.js下载下

我的Linux笔记_正熵的博客-程序员资料

学习目标:常用linux命令的使用 JAVAEE :后台应用都会涉及到linux系统,应用程序的部署,运维,分布式集群,大数据,云计算虚拟机:虚拟出来的计算机 虚拟机软件:用来产生虚拟机的一个软件对服务器的管理,都是通过远程登录来进行,远程登录的常用软件有以下3款: xshell putty secureCRT —-recommend 推荐 这些软件都是基于一种通信协议来进行远程登录

SSL/TLS的Handshake过程与javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure异常_易生一世的博客-程序员资料

一.SSL/TLS的Handshake过程在SSL/TLS的Handshake过程中,客户端与服务器之间需要交换参数,具体过程如下:客户端提供其所支持的各种cipher suites(包含加密算法和Hash函数) 服务器从中选择自己也支持的cipher suite,并通知客户端,表明两者将以此进行数据传输 服务器同时将自己的数字证书(包括服务器名称、CA和公钥)作为标识符发给客户端 ...

C/C++内存管理(4)_lien0906的博客-程序员资料

本文将对 Linux? 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。为什么必须管理内存内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管

CMake构建、编译OpenCV工程_cmake opencv 会构建子版本号_桔子code的博客-程序员资料

原文链接:http://www.juzicode.com/opencv-note-cmake-project-vs-windowsOpenCV除了提供二进制包,还可以下载其源码手动编译二进制文件,不过源码中并没有提供可以直接编译的工程文件,需要借助CMake工具完成工程文件的构建。获取源码从官网opencv.org找到github链接,或者直接进入https://github.com/opencv/opencv/releases找到相应的版本,这里以4.5.3为例:在该版本下有多个发

推荐文章

热门文章

相关标签