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

JDK核心工程師答疑:模塊化令JDK 7不再臃腫

原創(chuàng)
開(kāi)發(fā) 后端
JDK正在失去它的優(yōu)勢(shì)嗎?很多人抱怨說(shuō)Java就像C++那樣,每次變化都變得越來(lái)越臃腫。近日,JDK核心團(tuán)隊(duì)的工程師Alan Bateman撰博文解釋說(shuō)JDK 7在模塊化上的努力將會(huì)改變這一現(xiàn)狀。

【51CTO精選譯文】Java 7(嚴(yán)格說(shuō)來(lái)是JDK 7)現(xiàn)在已經(jīng)公開(kāi)了M5版本用于測(cè)試,其中有已經(jīng)完成的七大功能,也有開(kāi)發(fā)者放出一些主要功能的代碼范例供他人參考。JDK的每一次改版都有人抱怨說(shuō)這令Java平臺(tái)更加臃腫,正在步上C++的老路。這次JDK 7是否能夠扭轉(zhuǎn)這一局面?Sun的員工,JDK核心團(tuán)隊(duì)的工程師Alan Bateman近日在博客上撰文,介紹了JDK 7在模塊化方面做出的努力,從而解決之前那些臃腫的問(wèn)題。

JDK 7的一個(gè)目標(biāo)就是要給我們提供模塊化的平臺(tái)。達(dá)到這個(gè)目標(biāo)會(huì)比較困難,因?yàn)樗且粋€(gè)關(guān)系錯(cuò)綜復(fù)雜的代碼基礎(chǔ),是由API與很多不同領(lǐng)域的實(shí)施之間的依賴關(guān)系構(gòu)成的。這些關(guān)系已經(jīng)建立起了很多年,而且在很多發(fā)布的版本中都是如此。舉個(gè)例子(這種情況來(lái)自以前的幾個(gè)版本,但是大部分也適用于JDK6):假設(shè)你正在使用Logging API(意味著需要java.util.logging)。Logging需要NIO和JMX,而JMX又需要JavaBeans, JNDI, RMI 以及CORBA (JMX 的遠(yuǎn)程 API 要求 RMI 連接器支持JRMP和IIOP)。JNDI又需要java.applet.Applet,而JavaBeans依靠AWT, Swing,以及所有客戶端的東西。如果這些還不夠,意味著JavaBeans會(huì)一直跟JDBC以及更多的東西有關(guān)系。我還能夠繼續(xù)延伸下去,但是我們應(yīng)該清楚的是這個(gè)看起來(lái)似乎很無(wú)辜的logging API的使用卻引出了如此眾多的依賴關(guān)系,幾乎包括了整個(gè)平臺(tái)。很明顯,這些只是依賴關(guān)系,日志并沒(méi)有真正需要實(shí)際裝載任何CORBA的1600多個(gè)類。想象一下,這種情況更像是兩個(gè)人在吃飯,但是她卻雇了輛公共汽車把她的一大家子人和朋友都拉到飯店的外面等著。

[[7589]] 
這種情況更像是兩個(gè)人在吃飯,但是她卻雇了輛公共汽車把她的一大家子人和朋友都拉到飯店的外面等著

好消息是以前的幾個(gè)版本中在解決這些問(wèn)題方面已經(jīng)開(kāi)始有了進(jìn)步。日志不再需要JMX(這需要一個(gè)API變化來(lái)收回/重新訪問(wèn))。我們從RMI-IIOP中分離出來(lái),所以你不需要CORBA的存在就能夠進(jìn)行遠(yuǎn)程管理。當(dāng)不使用JavaBeans的時(shí)候,JMX會(huì)發(fā)揮自己的作用。JNDI不再需要java.applet.Applet,JavaBeans不再需要JDBC,AWT也不再需要RMI,等等。

JDK 7的模塊劃分

那么我們處在哪一階段呢?目前,我們有了一個(gè)初步的基本模塊,它本質(zhì)上就是核心庫(kù)(lang/io/net/util/nio/security)。過(guò)去,在這個(gè)模塊中存在的類對(duì)JNDI、部署代碼、AWT、參數(shù)選擇以及l(fā)ogging APIs、JMX的依賴關(guān)系都被移除或者轉(zhuǎn)換了。里面還是有一個(gè)對(duì)XML分析的依賴,但是這個(gè)問(wèn)題隨著時(shí)間的推移也會(huì)被解決。

所有這些Swing, AWT, 2D等等都被分組放在一個(gè)初步的客戶端模塊中。這個(gè)模塊中的API之間的聯(lián)系是錯(cuò)綜復(fù)雜的,所以面臨著一個(gè)很大的挑戰(zhàn)。在客戶端還存在幾個(gè)跟其他的模塊(比如網(wǎng)絡(luò)服務(wù))依賴關(guān)系,這也需要做工作,但是最終可以不去管它,比如當(dāng)部署一臺(tái)嵌入式設(shè)備的時(shí)候。

我們可以對(duì)幾個(gè)比較小的模塊進(jìn)行分組,在將來(lái)可能進(jìn)入更大的模塊組里。Logging, RMI, JSSE (SSL), SASL, JDBC, JNDI, LDAP 和其他的 JNDI 提供商, PKCS11和其他的安全提供商將會(huì)給它們命名。JSSE就是一個(gè)很好的例子,人們把它從平臺(tái)的其他地方解脫了出來(lái)。有人可能認(rèn)為他不需要JSSE就可以保證網(wǎng)絡(luò)的安全,但是由于SSL能夠使用基于認(rèn)證的Kerberos作為協(xié)議,它就被綁定在Kerberos/JGSS上。在這種情況下,依賴關(guān)系是可選擇的。如果安裝了Kerberos,那么SSL在對(duì)安全環(huán)境進(jìn)行協(xié)商的時(shí)候就可以包括Kerberos。當(dāng)沒(méi)有安裝的時(shí)候,它不會(huì)試圖使用Kerberos進(jìn)行協(xié)商。

我在上面提到了CORBA,因?yàn)樗?jīng)常被當(dāng)做JDK兼容性問(wèn)題的替罪羊。人們已經(jīng)提出了一個(gè)可能的兼容性模塊,它可以兼容那些不再建議使用的、遺留的、過(guò)氣的,以及其他一些代碼。Sean Mullan和Vincent Ryan在這方面做了很好的工作,他們移除了JDK 7 b78中對(duì)過(guò)時(shí)的安全類依賴關(guān)系,所以這些類不需要存在于基本的模塊中。另外一個(gè)可能需要移除的是遺留的sun.io轉(zhuǎn)換器。我們?cè)诙嗄暌郧熬蛻?yīng)該擺脫這些轉(zhuǎn)換器的束縛,但是由于還存在JDBC驅(qū)動(dòng)而不能移除對(duì)它們的依賴。在sun.misc中也有很多不再使用的類,但是我們不能移除它們,因?yàn)橛行┕之惖膽?yīng)用程序會(huì)可能直接使用它們。過(guò)時(shí)的協(xié)議處理程序和內(nèi)容處理程序是其他一些需要移除的東西。其實(shí),我敢保證讀者還能想到其他需要移除的內(nèi)容。

在上面提到的內(nèi)容中,值得注意的是模塊不一定跟包(package)的邊界對(duì)齊了。對(duì)于一個(gè)模塊來(lái)說(shuō),在一個(gè)或者更多完整的包中包含所有的類非常必要,但是很多情況下這是不可能的。我上面提到的JavaBeans就是一個(gè)很明顯的例子,人們必須把屬性事件支持、內(nèi)部標(biāo)注與綁定在客戶端區(qū)域的其他類區(qū)分開(kāi)來(lái)。New I/O 以及 Logging的API具有管理接口,把這些管理接口分組加入到跟JMX以及java.lang.management相對(duì)應(yīng)的管理模塊中有更大的意義。我前面也提到過(guò)IIOP運(yùn)輸跟RMI編譯器的分離。Rmic編譯器將生成stub和the javax.management.remote.rmi包的關(guān)系,但是我們不想把這些分組到管理模塊,因?yàn)樗鼤?huì)對(duì)CORBA產(chǎn)生依賴。如果有人想對(duì)基本模塊進(jìn)一步分解,那么這將意味著要讓java.util這樣的包能夠包含比API集合更多的東西。

總結(jié)

#T#我希望上述內(nèi)容能夠讓你了解在JDK 7中發(fā)生了什么。一個(gè)更加模塊化的JDK讓我們離提高性能的目標(biāo)越來(lái)越近了(包括下載以及開(kāi)始時(shí)間),它能夠讓平臺(tái)按比例縮減,而且能夠帶來(lái)更多的好處。那些對(duì)這方面感興趣、想要深入學(xué)習(xí)的人們可以從Jigsaw工程頁(yè)面以及郵件列表開(kāi)始入手。Jigsaw工具庫(kù)里有一個(gè)名叫ClassAnalyzer的工具,我們一直使用它分析各種依賴關(guān)系以及指導(dǎo)各種變化。這個(gè)工具能分析模塊的定義,并給每個(gè)模塊產(chǎn)生幾個(gè)文件,包括類的列表,以及它們之間的依賴關(guān)系。它能生成各種形式的總結(jié)文件,包括DOT文件,這對(duì)于那些想用肉眼看到各種依賴關(guān)系的人來(lái)說(shuō)非常實(shí)用。上面提到的大部分工作可以認(rèn)為是在移除依賴圖表的優(yōu)勢(shì)。Mandy已經(jīng)在著手下一步的工作了,改變版本的功能,讓JDK能夠生成模塊而不是rt.jar。這需要幾個(gè)步驟。最初的版本將生成JAR文件,但是最終我們一定能把它轉(zhuǎn)換到一個(gè)更好的容器格式下。

原文:Is the JDK losing its edge(s)? 作者:Alan Bateman

責(zé)任編輯:yangsai 來(lái)源: 51CTO.com
相關(guān)推薦

2017-09-10 17:08:11

Java 9程序Oracle

2019-08-28 16:18:39

JavaScriptJS前端

2010-09-25 09:30:28

JDK 7Java 7

2014-04-17 10:03:39

Java8Java

2010-05-17 13:44:52

2010-05-21 18:26:58

2013-09-02 10:08:03

虛擬化核心應(yīng)用

2015-03-17 15:29:03

創(chuàng)業(yè)公司后端工程師應(yīng)用開(kāi)發(fā)

2012-10-30 10:45:49

JavaJDKJDBC-ODBC

2011-08-02 09:22:17

NetBeansJava 7

2011-07-29 09:31:32

JDK 7

2010-06-03 17:38:05

Java 7JDK7

2011-12-27 10:17:56

JDKJava

2013-08-20 15:31:18

前端模塊化

2017-05-18 10:23:55

模塊化開(kāi)發(fā)RequireJsJavascript

2020-09-17 10:30:21

前端模塊化組件

2015-10-10 11:29:45

Java模塊化系統(tǒng)初探

2020-09-18 09:02:32

前端模塊化

2022-03-11 13:01:27

前端模塊

2013-08-19 09:31:16

Google工程師
點(diǎn)贊
收藏

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