編者按:JDK軟件包之間的相互依賴性一直是使用Java 平臺最大的非議之一,因為就到具體應用的時候這會產生龐大臃腫的架構。很多開發者希望JDK 變小、變快,正處于開發中的JDK7是否會實現這些功能、重鑄JDK的鋒芒呢?JDK7的進展狀況和新性能又是怎樣的呢?本文,JDK核心團隊的工程師Alan Bateman就此展開了話題:
JDK7的一個任務就是為我們提供模塊化平臺,但要做到這一點真的很困難,因為它的代碼基與許多討厭的依賴有著千絲萬縷的聯系,這些依賴存在于API和許多不同區域的執行之間。這些依賴已經建立了很多年,舉例來說:假設你正使用Logging API(java.util.logging)),Logging需要NIO和JMX,JMX需要JavaBeans, JNDI, RMI和CORBA,JNDI需要java.applet.Applet而且JavaBeans依賴AWT, Swing例子有很多,但結論很明顯:使用Logging API是非常不明智的,因為最終這會導致對整個平臺的依賴。(這里要說明一下:這些都只是依賴,logging當然不需要真的去加載CORBA的超過1600個class)
好消息是,我們已經開始在上幾個構建中做出進步來解決這些問題。Logging不再需要JMX(這需要一個API的變化:回退和重新訪問(backed-out/re-visited));我們還析出RMI IIOP transport,這樣即便沒有CORBA你也可以遠程管理;沒有JavaBeans,JMX也一樣可以自我測試;JNDI中不再需要java.applet.Applet;JavaBeans不再需要JDBC;AWT不再需要RMI
所以現在我們有了一個初步的模塊基礎,尤其是核心庫(lang/io/net/util/nio/security)。原來存在于JNDI、部署代碼(deployment code)、AWT、參數、logging API及JMX中的依賴已經被移除或者倒置。不過仍有一個XML解析下的依賴(來自java.util.Properties),但它很快也會被解決。
Swing, AWT, 2D等都已經進入了客戶端模塊化的階段。由于這些模塊中的API的關聯性很強,所以模塊化工作很有挑戰性。還有一些來自于其他模塊(比如web服務)的一些依賴,不過最終這些都會解決掉,到時可以用于嵌入式設備。
我們有幾個細粒度模塊,可能在未來被劃為粗粒度模塊。Logging, RMI, JSSE (SSL), SASL, JDBC, JNDI, LDAP以及其他JNDI供應商、PKCS11和其他安全供應商將為它們命名。JSSE是從平臺其他區域剝離的很好的例子,也許有人會認為它不需要發送請求就可以做安全連網,但由于SSL能夠基于身份驗證來使用Kerberos,所以實際上JSSE取決于Kerberos/JGSS。這種情況下,依賴就是可選的,即如果安裝了Kerberos,那么在執行安全的時候SSL會包括Kerberos密碼組件,如果沒有安裝Kerberos,則不會請求使用Kerberos。
我上文提到的CORBA還經常成為用戶指責JDK承載的兼容包的話柄,因為一個好的模塊應該拋棄那些無用的、遺留的、不受歡迎的包的兼容。所以,Sean Mullan和Vincent Ryan在jdk7 b78中做了很多工作,刪除了對無用安全類的依賴,從而這些無用安全類就不必存在于基礎模塊中。其他準備被移除的包括繼承的sun.io轉換器,我們早應該遺棄它只是JDBC驅動對它的依賴尚未移除;還有sun.misc中的許多類也都沒用了,但我們還是沒法刪除因為許多應用直接使用它們。
值得一提的是,模塊并不一定與封裝邊界(package boundaries)一致。當然最理想的狀況是一個模塊涵蓋一個或多個完整包中所有的類,但許多情況下這是不可能的。我上文提到的JavaBeans就是一個很好的例子:將屬性事件支持(property event support)和注釋從自省和其他連接客戶端區域的類中分離出來。New I/O和Logging等API有管理界面,所以將管理界面、管理模塊與JMX、java.lang.management聚合很有意義。上文我還提到了IIOP transport從RMI Connector中分離,這種情況下,rmic編輯器將生成抽頭與javax.management.remote.rmi包聯系在一起,但我們不需要將這些與管理模塊聚合因為它會產生對CORBA的依賴。
我希望通過我的上述能讓你了解JDK 7所正在做的。上文提到的很多都是為了移除依賴性,為的是一個更加模塊化的JDK,從而可以使我們更接近提高性能(下載和啟動時間)、建立平臺縮放性的目標。不過很多工作需要分幾步來完成,因此最初的構建會生成JAR文件,但最終我們會轉換成一個更好的格式。(文/王玉磊)
原文鏈接:http://blogs.sun.com/alanb/entry/is_the_jdk_losing_its
dm520