中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

我們?nèi)绾味xJava?

發(fā)布于:2021-02-04 14:55:20

0

188

0

java JDK 開發(fā)工具包 Java虛擬機(jī) 編程語言

Java是一個(gè)超負(fù)荷的詞。首先,它是印尼一個(gè)島嶼的名字,也是咖啡的一個(gè)術(shù)語。然后我們有了Java,即計(jì)算平臺(tái)。即便如此,這個(gè)詞也有幾個(gè)含義:我們說的是Java編程語言語法,Java虛擬機(jī)還是Java開發(fā)工具包(JDK)?我們可以使用更多的方式來使用Java這個(gè)術(shù)語:card、embedded、Micro Edition和enterpriseedition(至少現(xiàn)在我們已經(jīng)消除了Jakarta EE的歧義)。我肯定還有很多。

我拿著這個(gè)去哪?好吧,作為我在JDK遷移白皮書上所做工作的一部分,我正在編譯一個(gè)關(guān)于oraclejdk和zulujdk之間差異的精確列表,這是OpenJDK項(xiàng)目提供的源代碼的直接構(gòu)建。由于我也是javase規(guī)范的專家組成員,這讓我想到了如何定義Java的哪些是和哪些不是一部分(這讓我想到了Java的真正含義)。

在去年jdk9發(fā)布的同時(shí),Oracle發(fā)布了一系列關(guān)于JDK未來的開發(fā)和交付方式的公告。我以前寫過很多這方面的內(nèi)容,但其中一部分是消除了oraclejdk和從OpenJDK源代碼構(gòu)建的JDK之間的所有功能差異。這項(xiàng)工作將在今年晚些時(shí)候jdk11發(fā)布時(shí)完成,包括向OpenJDK項(xiàng)目添加組件以及從oraclejdk中刪除特性。

其中大部分已經(jīng)被廣泛宣傳。以前的商業(yè)特性,如應(yīng)用程序級(jí)數(shù)據(jù)共享、Java飛行記錄器和Java任務(wù)控制,都是由Oracle作為開放源代碼貢獻(xiàn)給OpenJDK項(xiàng)目的。JavaFX、瀏覽器插件和javawebstart等其他特性都將從jdk11的Oracle實(shí)現(xiàn)中刪除。

我想說的是,這是如何定義的。把它放到維恩圖中是很有用的,這樣可以更清楚地理解事情。

最小的部分是javase。這是JSR通過JCP定義的規(guī)范。如果您想創(chuàng)建一個(gè)可以稱為Java的東西,那么這是您需要提供的最低要求。這包括標(biāo)準(zhǔn)的庫集(所有java和javax包,以及一些組織.xml以及可以處理已定義字節(jié)碼集的JVM。JVM是根據(jù)功能來定義的,比如它需要一個(gè)垃圾收集器,而不是如何實(shí)現(xiàn)它。

在下一個(gè)層次,我們有OpenJDK。這是javase標(biāo)準(zhǔn)的參考實(shí)現(xiàn),因此自然包含了其中的所有內(nèi)容。它還包括javase沒有定義的東西。像JavaScript引擎Nashorn這樣的東西是OpenJDK的一部分,而不是javase(javase規(guī)范定義了腳本引擎的接口,但沒有定義任何這樣的引擎的實(shí)現(xiàn))。

由于OpenJDK是javase的超集,OpenJDK項(xiàng)目提出了另一種方法來定義OpenJDK的新特性。這些被稱為JDK增強(qiáng)建議(JEPs)。雖然不是一個(gè)正式的標(biāo)準(zhǔn)過程,但這是一個(gè)開放的過程。任何擁有OpenJDK提交者身份的人都可以自由提交JEP。當(dāng)然,因?yàn)槲覀円幚淼氖呛诵腏ava平臺(tái),幾乎有數(shù)百萬的開發(fā)人員在使用它,所以作為JEP提交一個(gè)有趣的想法并不能讓它被接受(事實(shí)上,遠(yuǎn)不是這樣)。到目前為止,只有一個(gè)改變API的特性JEP被Oracle以外的人成功提交、接受和發(fā)布。那是杰普285,我們?cè)诎⒆鏍柕奶崾?。這是向Thread類添加了一個(gè)方法,在許多實(shí)現(xiàn)中,這個(gè)方法什么也不做。我們需要付出大量的努力和審查,才能將其應(yīng)用到OpenJDK中。同樣,考慮到Java的廣泛使用,這是非常令人放心的。

還有一些非Oracle JEP用于JDK的不同端口(SAP的JEP 175和JEP 294以及Red Hat的JEP 237),還有一個(gè)將包含在JDK 11中(Red Hat的Epsilon垃圾收集器JEP 318)。

有趣的是,JEP這個(gè)詞最近有點(diǎn)用詞不當(dāng)。兩個(gè)jep 313和320描述了特征的刪除。我想你可以通過移除一些東西來增強(qiáng)某些東西,但這似乎有點(diǎn)違反直覺。

最后,我們有了oraclejdk。因?yàn)檫@是Oracle的OpenJDK的二進(jìn)制發(fā)行版,所以他們可以自由地添加任何他們想增加價(jià)值的特性。JavaFX就是一個(gè)很好的例子。JavaFX有自己的開源項(xiàng)目(OpenJFX),它獨(dú)立于OpenJDK。JavaFX從未集成到j(luò)avase標(biāo)準(zhǔn)中(與AWT和Swing不同)。刪除這樣的功能完全由甲骨文自行決定,但他們?cè)谕ㄟ^各種博客文章(稍后會(huì)有更多內(nèi)容)宣傳這樣的內(nèi)容方面做得相當(dāng)不錯(cuò)。

讓我們回到我之前所說的關(guān)于研究OpenJDK和oraclejdk之間的差異。作為本文的一部分,我對(duì)jdk10和jdk11中的模塊列表進(jìn)行了直接的區(qū)分。原來有31個(gè)模塊被移除,兩個(gè)模塊被添加。

首先,是刪除java.se.ee文件聚合器模塊。本文引用了六個(gè)模塊,它們是JavaSE的一部分,因此已從JavaSE11規(guī)范中刪除。聚合器模塊和兩個(gè)相關(guān)的特定于jdk的模塊不是javase規(guī)范的一部分。

  • java.se.ee

  • java.activation

  • java.corba

  • java.transaction

  • java.xml.bind

  • java.xml.ws.annotation

  • java.xml.ws

  • jdk.xml.bind(非Java SE)

  • jdk.xml.ws(非Java SE)

HTTP/2孵化器模塊(在jdk9中引入)已經(jīng)被刪除,并替換為現(xiàn)在是javase標(biāo)準(zhǔn)的一部分。這在jep110、jep321和javase11規(guī)范中有描述。

  • jdk.incubator.httpclient客戶端替換為java.net.http

JavaFX的模塊。正如我所提到的,這些模塊只包含在oraclejdk中,盡管JavaFX是更廣泛的OpenJDK項(xiàng)目的一部分。他們被撤職的消息在這里宣布了。

  • javafx.base

  • javafx.controls

  • javafx.deploy

  • javafx.fxml

  • javafx.graphics

  • javafx.media

  • javafx.swing

  • javafx.web

對(duì)于相關(guān)的Java packager,有兩個(gè)特定于JDK的模塊。

  • jdk.packager

  • jdk.packager.services

瀏覽器插件和JavaWebStart模塊。這些特性的刪除在這里和這里的模塊一起被公布,這些模塊主要是針對(duì)Oracle的,但是還有java.jnlp文件模塊。

這個(gè)模塊讓我很困惑。根據(jù)JDK文檔,所有Java SE模塊的名稱都以java開頭,但是似乎不是所有以java開頭的模塊都在Java SE中,因?yàn)閖ava.jnlp不是標(biāo)準(zhǔn)的一部分。但是,JCP將其定義為 JSR 56。這樣,根據(jù) 描述模塊化JDK的JEP 200,模塊名稱以java開頭。JSR 56的參考實(shí)現(xiàn)從未作為開源發(fā)布,因此它只是Oracle JDK的一部分。

  • java.jnlp

  • jdk.javaws

  • jdk.plugin

  • jdk.plugin.server

  • jdk.deploy

  • jdk.deploy.controlpanel

然后是其他模塊。有兩個(gè)明顯是甲骨文特有的,因?yàn)樗诿Q中。似乎因?yàn)樗鼈兪亲烂婧途W(wǎng)絡(luò)模塊,所以它們的前綴是oracle而不是jdk,以防止混淆。

  • oracle.desktop(Oracle AWT實(shí)用程序)

  • oracle.net(SDP和NIO Oracle的補(bǔ)充)

最后,我們還有另外三個(gè)特定于Oracle的模塊。在這些情況下,除了JDK 10的along文檔聲明這些特性被棄用之外,其他地方似乎都沒有宣布刪除這些特性。我有點(diǎn)驚訝的是,SNMP支持的刪除沒有在某處宣布(如果我錯(cuò)了,請(qǐng)糾正我,但是標(biāo)準(zhǔn)搜索沒有顯示任何內(nèi)容)。

  • jdk.management.resource(資源管理)

  • jdk.management.cmm(協(xié)同內(nèi)存管理)

  • jdk.snmp(SNMP支持)

至少?gòu)膉dk11開始,Venn圖縮小到只有兩個(gè)圓:OpenJDK和javase。

我計(jì)劃在以后的博客文章中更詳細(xì)地討論JCP和OpenJDK之間的關(guān)系以及Java特性是如何被添加或刪除的。