比較一下 Oracle JDK與openJDK的區別

寫在前面

簡單記錄學習,兩者的區別,沒有太多技術含量,倒是花了不少心思總結,歡迎關注,點贊哈

這裏先貼圖歷史版本新增特性

在這裏插入圖片描述

這裏引用參考下,這篇大佬文章,鏈接在此,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

安裝包就一個,如圖,官網地址
在這裏插入圖片描述

3.1-2、Open JDK架構1

鏈接地址,在此
如下圖
在這裏插入圖片描述
這裏比較出 openJDK的JRE和JDK是分開放的

3.2 Oracle JDK 與 Open JDK 目錄結構比較

在這裏插入圖片描述

這裏看得出 Oracle JDK 是基於 SDK(Jar)進行版本的維護的,部分提供了源碼集
OpenJDK 是基於 package 進行版本維護,提供了所有的源碼集,目錄更清晰,部分實現還變更於與Oracle JDK 不同的包下,後面我摘出部分事例參考

還要注意 IntelliJ IDEA 中也集成了部分的 SDK,注意開發時確保正確的開發環境

3.3 JVM

openJDK已經不顯示 JVM了

在這裏插入圖片描述

3.4 不同的命令行操作

在這裏插入圖片描述

四、常用對象的不同的實現(OracleJDK源碼在OpenJDK中的不同實現)

摘錄部分,常用對象,這裏總結會有點亂(我還沒仔細地觀察真正的源碼區別)

4.1、Object

在這裏插入圖片描述

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中的實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章