首页 > 数据库 >比较一下 Oracle JDK与openJDK的区别

比较一下 Oracle JDK与openJDK的区别

时间:2022-11-09 14:14:53浏览次数:92  
标签:java JDK openJDK 开源 源码 Oracle import


比较一下 Oracle JDK与openJDK的区别

  • ​​写在前面​​
  • ​​一、前景​​
  • ​​二、开源​​
  • ​​三、相关底层架构,实现比较​​
  • ​​3.1-1、Oracle JDK架构1​​
  • ​​3.1-2、Open JDK架构1​​
  • ​​3.2 Oracle JDK 与 Open JDK 目录结构比较​​
  • ​​3.3 JVM​​
  • ​​3.4 不同的命令行操作​​
  • ​​四、常用对象的不同的实现(OracleJDK源码在OpenJDK中的不同实现)​​
  • ​​4.1、Object​​
  • ​​4.2、ArrayList​​
  • ​​五、OracleJDK中未开源的部分​​

写在前面

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

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

比较一下 Oracle  JDK与openJDK的区别_jar

这里引用参考下,这篇大佬文章,链接在此,​​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

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

比较一下 Oracle  JDK与openJDK的区别_java_02

3.1-2、Open JDK架构1

链接地址,​​在此​​ 如下图

比较一下 Oracle  JDK与openJDK的区别_oracle_03


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

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

比较一下 Oracle  JDK与openJDK的区别_openjdk_04

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

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

3.3 JVM

openJDK已经不显示 JVM了

比较一下 Oracle  JDK与openJDK的区别_jar_05

3.4 不同的命令行操作

比较一下 Oracle  JDK与openJDK的区别_openjdk_06

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

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

4.1、Object

比较一下 Oracle  JDK与openJDK的区别_jar_07

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;

/**
* <a href="{@docRoot}/../technotes/guides/collections/index.html">
* Java Collections Framework</a>.
*
* @author Josh Bloch
* @author Neal Gafter
* @see Collection
* @see List
* @see LinkedList
* @see Vector
* @since 1.2
*/

public class ArrayList<E> extends AbstractList<E>
implements List<E>, 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;

/**
* <p>This class is a member of the
* <a href="{@docRoot}/java.base/java/util/package-summary.html#CollectionsFramework">
* Java Collections Framework</a>.
*
* @param <E> 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<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{...}

五、OracleJDK中未开源的部分

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


标签:java,JDK,openJDK,开源,源码,Oracle,import
From: https://blog.51cto.com/u_15870196/5836223

相关文章