区分oracle和ibm jdk,比较一下 Oracle JDK与openJDK的区别

本文对比了Oracle JDK和OpenJDK在前景、开源性、架构和实现上的差异,探讨了为何Docker容器多使用OpenJDK,并列举了两者在对象实现上的不同。Oracle JDK仅开放了部分源码,而OpenJDK开源所有源码,提供了更清晰的目录结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

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

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

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中的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值