自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java那些事-聊聊那些易混淆的概念:OpenJDK/oracleJDK,Java EE/Jakarta EE

開發(fā) 前端
本篇博文,跟大家一起回顧下JAVA那些易混淆的概念,包括 JVM/JRE/JDK,openJDK/oracleJDK,以及 JAVA SE/JAVA EE/Jakarta EE。

本文轉(zhuǎn)載自微信公眾號「明哥的IT隨筆」,作者IT明哥。轉(zhuǎn)載本文請聯(lián)系明哥的IT隨筆公眾號。

大家好,我是明哥。

本篇博文,跟大家一起回顧下JAVA那些易混淆的概念,包括 JVM/JRE/JDK,openJDK/oracleJDK,以及 JAVA SE/JAVA EE/Jakarta EE。

1 JVM/JRE/JDK

JVM,Java Virtual Machine,即 JAVA 虛擬機,是負責執(zhí)行 JAVA 程序的。JVM 首先解釋 JAVA 編譯器編譯獲得的 bytecode 字節(jié)碼,然后將類相關(guān)信息存儲在內(nèi)存中,最后執(zhí)行 bytecode 字節(jié)碼。JVM 有自己的 instruction set 指令集, 并在運行時管理各種內(nèi)存區(qū)域。JVM 包含以下組件:

  • Class Loaders 類加載器
  • Run-Time Data Areas 運行時數(shù)據(jù)區(qū)
  • Execution Engine 執(zhí)行引擎

JRE, Java Runtime Environment,即 JAVA 運行時環(huán)境,是一系列運行 JAVA 應用程序所需的軟件組件。JRE 包含以下核心組件:

  • An implementation of a Java Virtual Machine:JVM 的一個實現(xiàn)
  • Classes required to run the Java programs:運行JAVA 應用程序需要的基礎(chǔ)類
  • Property Files:配置文件/屬性文件

JDK, Java Development Kit,即 JAVA 開發(fā)工具包,提供了開發(fā)/編譯/調(diào)試/執(zhí)行 JAVA 應用程序的環(huán)境和工具。JDK 包含以下核心組件:

  • JRE
  • Development Tools 開發(fā)工具

從上文可以看出,三者之間的關(guān)系是:

  • JDK 包含JRE,JRE又包含JVM;
  • 運行JAVA應用程序,需要安裝 JRE;
  • 開發(fā)調(diào)試JAVA應用程序,需要安裝 JDK;
  • 在JDK8及以前,安裝JDK時,JDK目錄中包含JRE子目錄;
  • 在JDK9及以后,安裝JDK后,默認是沒有包含JRE子目錄的,可以通過以下命令生成 JRE 子目錄: bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre

JDK8

JDK11

2 常見的各種 JDK builds - openJDK, oracle JDK,Azul Zulu...

  • Java 原名 Oak, 是 Sun Microsystems 公司的 James Gosling 及其團隊于 1995 年 5 月推出的 Java 程序設(shè)計語言 和 Java 平臺 的總稱;
  • Sun 在 JavaOne 2006 中宣布將開源 Java,并建立了 Open JDK 社區(qū),隨后 Sun 在 GPL 下陸續(xù)發(fā)布了 Java 類庫的源代碼(除了一些被第三方授權(quán)給 Sun 且 Sun 無法根據(jù) GPL 重新授權(quán)的受限部分之外);
  • OpenJDK 是由 OpenJDK Community 領(lǐng)導的 OpenJDK Project(Java SE 7 - Java SE 9)/ JDK Project(Java SE 10及其以后)產(chǎn)出的 Java SE 的官方開源參考實現(xiàn),其具體版本的開發(fā)標準是 Java Community Process(JCP) 發(fā)布的 Java Specification Requests(JSR,Java規(guī)范請求),該社區(qū)由 Oracle、IBM 領(lǐng)導,成員包括 Alibaba,Amazon,Ampere,Azul,BellSoft,Canonical,F(xiàn)ujitsu,Google,Huawei,Intel,Java Community,JetBrains,London Java Community,Microsoft,Red Hat,SAP,SouJava,SUSE,Tencent,Twitter ,VMWare 等等;
  • OpenJDK 社區(qū)只發(fā)布 OpenJDK 源碼,并不提供可以直接使用的二進制文件格式,現(xiàn)在能直接使用的二進制格式的 JDK, 都是被不同廠商編譯之后的程序,其中 OpenJDK 官網(wǎng)指向的二進制文件的下載地址,實際是 Oracle’s OpenJDK builds 的下載地址,包括免費版本和商業(yè)版本兩個版本:(兩個版本基于相同的代碼,只是一個使用 GPL license,一個使用 oracle的license);

  • 自 Java SE 7開始往后的版本,所有的 JDK 都源自于 Open JDK (OpenJDK 與 其他 JDK 的關(guān)系就和 Linux 與它的眾多發(fā)行版是一樣一樣的);

所以概括起來:

  • OracleJDK 是 Oracle 基于 OpenJDK Project(Java SE 7 - Java SE 9)/ JDK Project(Java SE 10及其以后),在 OpenJDK Community (OpenJDK 社區(qū))的領(lǐng)導下,以 Java Community Process(Java 社區(qū)進程)制作的 Java Specification Request(Java 規(guī)范請求)為標準,制作出的 OpenJDK 所制作的商業(yè)版構(gòu)建,本質(zhì)上來說,OracleJDK 也是 OpenJDK 的發(fā)行版之一;
  • 目前使用最多的 Java builds 仍舊是 OracleJDK,但其后分別還有 AdoptOpenJDK、Oracle's OpenJDK、Amazon Corretto、Azul Zulu,以及國內(nèi)的 Alibaba Dragonwell、Huawei bisheng JDK、Tencent Kona 等;

3 JAVA SE, JAVA EE,與 Jakarta EE

3.1 JAVA SE

JAVA SE,即 Java Standard Edition, 早期版本稱為 J2SE:

  • JAVA SE 是構(gòu)建所有 JAVA 應用程序的基礎(chǔ),其包含的類有 java.lang 包下的所有類,I/O 類,Threading API, RMI 包和類,i18n 國際化類,JDBC API, Collections API (List, Map, Set 等), AWT 和 Swing 類(創(chuàng)建桌面應用和applets等),等等;
  • 常見的 JAVA SE 構(gòu)建的JAVA應用,有 IntelliJ IDEA IDE, Servlet Containers (如 Tomcat), RDBMS (如 Apache Derby),SQuirreL,等等;
  • 我們通過安裝JDK (如OracleJDK),即可獲得 JAVA SE 的基礎(chǔ)類庫;

3.2 Java EE

Java EE,即 Java Enterprise Edition, 早期版本稱為 J2EE:

  • Java EE 是一系列開發(fā)企業(yè)級 JAVA 應用的規(guī)范,這些規(guī)范具體來講包含:Servlet 規(guī)范(處理 HTTP request-response),EJB 規(guī)范 (事務處理和組件生命周期管理),JMS 規(guī)范 (消息處理),JPA 規(guī)范,等等;
  • Java EE 本身只是一個規(guī)范,只是一系列 API接口,并不包含具體的實現(xiàn);
  • Java EE 具體的實現(xiàn),有各種 Java EE 容器,如 GlassFish,WebLogic, WebSphere, Tomcat等來提供;(當然了,這些容器在底層使用了 Java SE 中的各種類);
  • Java EE 5 之后,啟動了項目 GlassFish,GlassFish 是Java EE 的官方開源參考實現(xiàn);
  • 各種 Java EE 容器對 JAVA EE 規(guī)范的實現(xiàn)不同,且有的只實現(xiàn)了其中的一部分規(guī)范:比如 Tomcat,Jetty 等只實現(xiàn)了 Servlet 規(guī)范 (經(jīng)常被稱為JAVA web/servlet 容器),而 GlassFish,WebLogic, WebSphere 等實現(xiàn)了 JAVA EE 所有規(guī)范;(經(jīng)常被稱為JAVA 應用服務器 JAVA application servers);

3.3 Jakarta EE

Jakarta EE,即 Java Enterprise Edition, 早期版本稱為 J2EE:

  • JAVA EE 的最后一個版本是JAVA EE 8,此后于2017年8月,Oracle 宣布開源 Java EE 并將項目移交給 Eclipse 基金會,由這個開源基金會全面接管 Java EE 的管理和發(fā)展;(將 Java EE 捐贈出去的 Oracle 也因此在 Eclipse 基金會的董事會中占得一席之地);
  • Oracle 移交給 Eclipse 基金會的內(nèi)容,包括:其主導的 Java EE 技術(shù)(規(guī)范),及相關(guān)的 GlassFish 技術(shù)(規(guī)范的參考實現(xiàn)),技術(shù)兼容性工具包(TCKs:Technology Compatibility Kit),以及“相關(guān)的項目說明文檔”,并希望通過 Eclipse 基金會在開源項目治理、Java EE 及相關(guān)技術(shù)方面的豐富經(jīng)驗共同將 Java EE 帶向更美好的未來;
  • 但在移交過程中,Oracle 卻提出了一系列 Eclipse 基金會難以接受的要求,諸如:
  • Oracle 要求由 Eclipse 基金會發(fā)行的產(chǎn)品(如 Eclipse IDE)必須只能捆綁由 Oracle 認證(而不是任何其他供應商認證)的 Java 運行時。(這意味著 Eclipse 基金會的產(chǎn)品如 GlassFish 和 Eclipse IDE 將不再是供應商中立,從而導致基金會的免稅狀態(tài)可能不再有效,這對基金會而言將是財務上的災難,有可能導致基金會關(guān)閉。更重要的是,這一要求并不是在談判開始時提出的,而是在談判開始很久以后才提出,那個時候交接工作正在進行中。外猜測這是 Oracle 對 IBM 開源 OpenJ9 JVM 的反應,畢竟這對它的 Java 業(yè)務構(gòu)成了明顯的威脅。)
  • Oracle 要求 Eclipse 基金會不能修改舊的代碼,如需修改則要重命名,包括項目名稱和軟件包的名稱。這意味著現(xiàn)有的應用程序無法在沒有重構(gòu)和重新編輯的情況下運行在更新后的平臺上。
  • 經(jīng)過許多個月的友善談判,Eclipse 基金會和 Oracle 無法就修改 javax 包命名空間,以及在此前的 Java EE 規(guī)范中曾使用的 Java 商標協(xié)議條款達成一致。而最后達成的共識就是,Jakarta EE 不能發(fā)布針對基礎(chǔ)庫 javax 的修改包,Jakarta EE 規(guī)范也不能使用包括 Java 商標的現(xiàn)有規(guī)范名稱。(由于談判的復雜性和保密性,Eclipse 基金會和 Oracle 都同意不公開導致談判結(jié)果的原因。不過有消息稱 Oracle 利用了它在董事會的席位去干預決策。)
  • 移交后,Oracle 出于商標權(quán)限制,不允許開源組織用 Java EE 的名號,于是 Eclipse 基金會選出了 "Jakarta EE" 和"Enterprise Profile" 兩個備選名字,經(jīng)過投票,最終前者以64.4%的票數(shù)獲勝,也就是說,Java EE已經(jīng)正式更名為 Jakarta EE;

  • 移交后,Oracle 出于商標權(quán)限制,對 javax.* 包命名空間的使用做了各種限制(Jakarta EE 不能發(fā)布針對基礎(chǔ)庫 javax 的修改包:好像是可以創(chuàng)建新的接口/類,但不能創(chuàng)建子包,也不能對原來的接口/類進行修改?);
  • Eclipse Jakarta EE project,經(jīng)過各種討論和權(quán)衡,最后決定將 javax.* 包下的所有API 和實現(xiàn),重命名遷移到 jakarta.* 包命名空間下,從而明確區(qū)分 JAVA EE 和 Jakarta EE,并為后續(xù) Jakarta EE 各種規(guī)范的演進掃清障礙;(Jakarta EE “Big Bang” Rename Option:Jakarta EE will rename all of its specifications to use jakarta.* in order to move forward with evolving the platform with features as the cloud-native Java platform.);
  • Jakarta EE 9,實施了從 javax.* 到 jakarta.* 的包命名空間重命名操作 (事實上,Jakarta EE 9 中,除了對包命名空間的改動,沒有其它任何大的修改:Functionally speaking, Jakarta EE 9 is still essentially the same as Java EE 8;Jakarta EE 10 will be the first version in which new functionality will appear);

  • 由于 Jakarta EE 9 及以后版本,實施了包命名空間的修改,所以所有依賴這些 API 規(guī)范的上層應用程序,都需要對應修改,比如 Tomcat, Websphere,Jboss,等等;(比如 Tomcat 10做了對應的修改)

責任編輯:武曉燕 來源: 明哥的IT隨筆
相關(guān)推薦

2019-01-08 16:26:43

Java EEJ2EEJakarta EE

2021-07-05 06:51:44

Java 企業(yè)版編程

2021-07-26 05:10:13

JavaJakarta EEJSR

2024-05-11 14:49:39

Java EEJakarta影響

2018-03-05 08:59:21

Java 開源Oracle

2023-07-31 08:21:22

語法校對器Pick

2020-11-30 13:10:39

MySQL安全服務器

2021-08-06 11:50:49

Linux 字節(jié)對齊Linux 系統(tǒng)

2022-09-09 08:08:28

開源項目服務

2015-08-20 09:17:36

Java線程池

2015-05-28 14:02:09

JavaJava日志性

2011-12-02 10:32:23

Java

2019-01-07 12:02:02

TCP長連接Java

2024-02-21 07:24:21

微服務單體架構(gòu)MVC

2009-06-22 17:05:41

Java EEJava企業(yè)應用

2018-05-31 13:50:30

Java高并發(fā)

2021-05-17 08:18:35

Java內(nèi)存模型JMM

2017-12-21 08:06:40

2021-03-07 16:31:35

Java編譯反編譯

2024-03-18 00:00:05

Java服務JVM
點贊
收藏

51CTO技術(shù)棧公眾號