偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

大家好,我是明哥。

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

1 JVM/JRE/JDK

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

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

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

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

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

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

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

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

JDK8

JDK11

2 常見(jiàn)的各種 JDK builds - openJDK, oracle JDK,Azul Zulu...

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

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

所以概括起來(lái):

  • OracleJDK 是 Oracle 基于 OpenJDK Project(Java SE 7 - Java SE 9)/ JDK Project(Java SE 10及其以后),在 OpenJDK Community (OpenJDK 社區(qū))的領(lǐng)導(dǎo)下,以 Java Community Process(Java 社區(qū)進(jìn)程)制作的 Java Specification Request(Java 規(guī)范請(qǐng)求)為標(biāo)準(zhǔn),制作出的 OpenJDK 所制作的商業(yè)版構(gòu)建,本質(zhì)上來(lái)說(shuō),OracleJDK 也是 OpenJDK 的發(fā)行版之一;
  • 目前使用最多的 Java builds 仍舊是 OracleJDK,但其后分別還有 AdoptOpenJDK、Oracle's OpenJDK、Amazon Corretto、Azul Zulu,以及國(guó)內(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, 早期版本稱(chēng)為 J2SE:

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

3.2 Java EE

Java EE,即 Java Enterprise Edition, 早期版本稱(chēng)為 J2EE:

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

3.3 Jakarta EE

Jakarta EE,即 Java Enterprise Edition, 早期版本稱(chēng)為 J2EE:

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

  • 移交后,Oracle 出于商標(biāo)權(quán)限制,對(duì) javax.* 包命名空間的使用做了各種限制(Jakarta EE 不能發(fā)布針對(duì)基礎(chǔ)庫(kù) javax 的修改包:好像是可以創(chuàng)建新的接口/類(lèi),但不能創(chuàng)建子包,也不能對(duì)原來(lái)的接口/類(lèi)進(jìn)行修改?);
  • Eclipse Jakarta EE project,經(jīng)過(guò)各種討論和權(quán)衡,最后決定將 javax.* 包下的所有API 和實(shí)現(xiàn),重命名遷移到 jakarta.* 包命名空間下,從而明確區(qū)分 JAVA EE 和 Jakarta EE,并為后續(xù) Jakarta EE 各種規(guī)范的演進(jìn)掃清障礙;(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,實(shí)施了從 javax.* 到 jakarta.* 的包命名空間重命名操作 (事實(shí)上,Jakarta EE 9 中,除了對(duì)包命名空間的改動(dòng),沒(méi)有其它任何大的修改: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 及以后版本,實(shí)施了包命名空間的修改,所以所有依賴這些 API 規(guī)范的上層應(yīng)用程序,都需要對(duì)應(yīng)修改,比如 Tomcat, Websphere,Jboss,等等;(比如 Tomcat 10做了對(duì)應(yīng)的修改)

責(zé)任編輯:武曉燕 來(lái)源: 明哥的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影響

2023-07-31 08:21:22

語(yǔ)法校對(duì)器Pick

2022-09-09 08:08:28

開(kāi)源項(xiàng)目服務(wù)

2020-11-30 13:10:39

MySQL安全服務(wù)器

2021-08-06 11:50:49

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

2018-03-05 08:59:21

Java 開(kāi)源Oracle

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長(zhǎng)連接Java

2024-02-21 07:24:21

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

2009-06-22 17:05:41

Java EEJava企業(yè)應(yīng)用

2017-12-21 08:06:40

2018-05-31 13:50:30

Java高并發(fā)

2021-05-17 08:18:35

Java內(nèi)存模型JMM

2012-05-31 09:53:38

IT風(fēng)云15年

2014-06-06 16:08:17

初志科技
點(diǎn)贊
收藏

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