再論Java未來之路
英文原文:The Future of Java Revisited
作者:Eric J. Bruno
翻譯:黃永兵
2006年我曾經寫過一篇討論Java未來的文章,在那篇文章中我討論了開源、Java在消費電子設備中的使用,現在在所有類型的移動設備上Java的應用正在逐步上升。對Sun被收購一事,以及Java與Oracle產品集成我沒什么好預測的,也沒什么好的建議,我只擔心Java的未來會走向何方?在這篇文章中我重新審視了Oracle收購Sun后Java的未來之路。
Java是什么?
如果要向一無所知的人解釋Java是什么還是比較有難度的,是的,它是一門編程語言,但發展到今天,Java一詞遠程超出了語言的定義。具體來說,Java是一個包括虛擬機環境,與C語言類似,包括庫和支持軟件,允許它運行在各種操作系統、計算機、設備和域中的平臺,包括以下技術:
· 用于桌面的Java SE;
· 用于服務器和企業解決方案的Java EE;
· 用于嵌入式和移動設備的Java ME;
· 用于應用程序暫時需要的實時Java(Real-Time Java);
· 用于構建RIA應用程序的JavaFX,用于PC、移動設備和電視(機頂盒、藍光播放機等)上的媒體應用。
因此,如果有人說“我是一名Java開發人員”,他們需要澄清究竟是Java的哪一個領域。我這里從平臺的角度討論Java的未來,包括Java SE,Java EE,Java ME,JavaFX,工具和語言。
Java的市場有多大?
按照Oracle的說法,Java是時下最流行的,無處不在的技術,2010年1月的統計數字如下:
· 9百萬Java開發人員
· 8.4億桌面安裝了Java
· 100多種不同硬件平臺支持上億的Java桌面安裝
a)每天2百萬的下載量
· 財富100強公司全部使用了Java
· 55億Java卡片
· 26億擁有Java功能的手機
b)250家手機運營商合作伙伴
c)10多萬Java ME應用程序
· 4千萬電視和藍光播放機
Java仍是目前最廣泛使用的編程語言,比所有腳本語言加起來的總數還多,由于Java平臺支持由不同腳本語言編寫的應用程序運行,這些數字會是重疊的。例如,Java虛擬機(JVM)可以執行用Java、Rexx、Ruby、JavaScript、Python、PHP、Groovy、Clojure和Scala.編寫的程序。在許多情況下,Sun的HotSpot JVM將會更好地運行這些應用程序,因為JIT(實時)編譯器會重新優化編譯過的代碼。
Java仍然是大多數企業和Web應用程序開發首選的語言/平臺,并繼續保持增長,Java是免費提供給開發者使用的,許多大學的計算機系也選擇Java作為編程語言課程,雖有這些光環籠罩,但這并不意味著我們不應該重新審視Java的未來發展方向,特別是Sun被收購后的這段時間。
Java SE
Oracle已經公布了Java的未來戰略,目標是加強和繼續擴大Java在新領域的應用,簡化,優化,并將Java平臺納入新的部署架構,加大對Java社區的投資,允許社區更多地參與。
Oracle產品開發執行副總裁Thomas Kurian表示,Oracle將推動Java成為使用最多,最具效率和世界上最流行的編程平臺,也將推動Java在更多的嵌入式設備中使用。Kurian表示會保留Java社區進程(Java Community Process,JCP)推動Java的發展,但我懷疑Oracle將會改造JCP過程,因為最近幾年已經暴露出不少問題,不合作的參與者可能會拖延Java規范請求(Java Specification Requests,JSR)。
Kurian也證實,Oracle將繼續為所有主流操作系統提供支持,以及流行的Java業務支持計劃,它將為當前和過期的JVM版本提供長期的支持,對于要在舊版本Java上維護傳統Java程序的企業而言,獲得安全補丁和其它支持是至關重要的。
最有趣的是,Kurian的發言幾乎總是圍繞最近發布的Java SE 7,Oracle的JRockit虛擬機和Sun的HotSpot合并展開的,Oracle在Java SE 7中計劃包括以下新特性:
· 模塊化的VM:我們的目標是將VM拆分成小塊由應用程序使用,并按需推向Internet,這樣的結果是Java應用程序的啟動時間更短了,當VM不在目標機器上時,下載的時間也更短了。
· 額外的語言支持:Java平臺支持用不同語言編寫的應用程序,現在將會添加更多的語言支持,當然也包括對動態語言的支持,這就是所謂的達芬奇機或多語言虛擬機,請參考JSR-292。
要特別指出的是,JVM增加了動態語言的支持,因此要想添加更多語言的支持就不費神了,在此之前,受Java語言靜態要求的影響,Java編譯器需要額外的編碼才能實現對動態語言的支持,這樣會致使JIT編譯時間增加,并且比正常的內存消耗大得多,因此也增加了垃圾回收的次數。
在Java SE 7中有了這個增強后,可以在運行時修改現有的類字節碼,因此消耗的持久化空間更少了,垃圾回收的次數也減少了,讓JIT可以優化更多的編譯后代碼。
· 增強的多核支持:需要借助工具、庫和內置設施幫助新的和現有的Java應用程序更有效地利用多核硬件的優勢,Java的線程模型可以輕松地創建并行執行任務的線程,但你如何將一個單一的任務拆分成多片進行并行執行呢?
有第三方的軟件包可以幫助我們,如Pervasive的DataRush產品,例如,Doug Lea修改了Java Fork/Join Framework,為Java增加了這一功能,直接將框架添加到java.util.concurrent包,它就會遞歸地將任務分解成子任務進行并行執行,框架處理線程和協調任務,當所有子任務結束時組成結果。
其它改進包括持續的性能改進,以及許多語言方面的增強,包括增加的閉包,在switch語句中對Strings的支持,以及多塊異常捕獲,閉包是一個有爭議的功能,它是通過使用匿名的Java內部類實現的。
Sun HotSpot和Oracle JRockit合并
在我看來,到目前為止,最令人吃驚的消息是HotSpot和JRockit的合并。多年來,前BEA JVM和Sun的JVM一直被困擾在性能和管理功能上,但現在王者終于再次回歸,在性能基準測試、總體延遲和垃圾回收技術中達到了最好的成績。
雖然很多人認為Sun的HotSpot JIT編譯器技術是最好的,但JRockit憑借其優秀的垃圾回收技術和其它目標性能增強使它成為某些應用程序的首選,如金融領域使用得就頗多。事實上,JRockit實時功能比Sun的Java RTS產品更具優勢,因為RTS經常要求修改應用程序的代碼。但Sun的HotSpot被認為是最可靠的JVM,可靠比速度應該更重要,同時,HotSpot支持更多操作系統和硬件平臺組合。
鑒于這兩個JVM都有各自的優勢,結合兩者的優點將會帶來更好的成績,到目前為止,Oracle表示JVM的整合目標如下:
· 增強管理和監控:HotSpot帶來了它的VisualVM和VisualGC工具,允許你可視化配置,檢查和分析運行中的Java應用程序,包括它們的內存使用情況和性能。Oracle提供了JRockit任務控制工具集,實現應用程序執行,GC活動和由線程同步導致的延遲,IO或內存相關問題的可視化報告。此外,JRockit的任務控制功能提供了不真實的監控和報告。
· 在hypervisor上本地執行:直接在硬件上運行Java虛擬機,超出了傳統操作系統的限制,這也是Oracle收購BEA和Sun之前這兩家公司的共同目標。這種設計可能消除了Java應用程序和硬件本身之間的大量軟件層。事實上,Azul公司在很多年以前就開始了這種嘗試,構建專門的硬件和Java虛擬機協同工作,從而消除傳統的操作系統。通過增加一個hypervisor,Oracle消除了專用硬件的限制,讓JVM可以運行在數據中心已經部署的所有硬件平臺上,如英特爾,AMD和基于Sparc的系統。
· 先進的垃圾回收:結合了Oracle/BEA和Sun在垃圾回收方面的技術沉淀,現在再怎么說也應該有一個質的飛躍了,Sun對實時行為和吞吐量(Java SE 6并行收集器)還單獨實現了一個GC(Java RTS的實時垃圾回收)。Jrcokit支持更少的回收,但它允許你指定操作模式。此外,對動態模式的支持,在運行時回收器可以選擇最佳的垃圾回收策略。雙方都做了許多有趣的努力和工作(Sun的工作成果是G1回收器),現在雙方一起工作應該可以創造出更優秀的垃圾回收器。
· 對多核系統的NUMA支持:非一致內存訪問(NUMA)讓內存訪問時間依賴于內存位置相對于處理器執行代碼的物理位置,在多核處理器技術領域更是一個熱門話題。例如,在多核處理器中,每個內核有它自己的本地數據緩存,在處理器級別又有一個共享的二級緩存,如圖1所示:
圖 1 多核處理器中的NUMA架構
另一種設計是所有內核共享處理器級緩存,但這并不一定是更好的設計。例如,共享緩存通常來自每個內核的物理緩存,訪問必須要在內核之間進行協調。
但據Oracle Java SE首席工程師Mark Reinhold透露,Java虛擬機合并可能會持續很長的時間,一是難度很大,二是要保證穩定性,他估計需要2年時間才能完成,Reinhold也希望能結合雙方的所有優點,造出一個超級產品。
無論發生什么情況,為了達到最佳性能和最低的延遲,JVM需要知道和支持NUMA架構。例如,通過與硬件打交道,JVM可以嘗試在一個內核上使用“熱緩存”執行代碼,所謂熱緩存就是你需要的數據就存儲在它里面。
Java EE
Oracle長期以來一直都是Java的支持者,也是最大的JCP成員之一,公司10多年前就開始參與Java EE規范的編制,因此對Oracle成為Java中間件市場的大鱷不應該感到意外。
通過自身努力和并購,Oracle匯聚成了自己的融合中間件平臺。它由完整的Java EE堆棧,基于SOA的服務,一個ESB,事務服務器和開發工具等組成。收購Sun后,Oracle擁有了Glassfish軟件套件,它也是一個Java EE參考實現。由于Oracle還擁有另一個Java EE平臺Weblogic,據最新的產品路線圖,Oracle在融合中間件堆棧中將使用Weblogic,而在嵌入式方面可能會使用Glassfish。
至于Java EE的未來,Oracle表示將在以下幾方面做出努力:
· 模塊化,開發標準:Java EE 6通過配置文件(Profile)定義實現了模塊化Java EE,允許廠商根據特定需求創建更小的Java EE堆棧子集,解決成本和Java EE使用復雜問題。通過模塊化設計和定義標準,有助于簡化Java EE,讓它的應用領域更廣泛。
· Java EE 6規定了兩種配置文件:Web配置文件(Servlet,JSP和JSF)和Java EE企業配置文件。顯然還可以定義更多的配置文件種類,例如,為支持會話初始化協議(SIP)定義電信服務器配置文件。
除了配置文件外,模塊化可用于部署中間件到其它設備,例如,Java EE堆棧的嵌入式部分嵌入到移動設備,如安防攝像頭,RFID閱讀器,或其它你能想到的任何智能設備,開放了標準Java編程模型后讓它的使用范圍更廣了。
· UI和RIA:HTML仍然是Java EE應用程序隱含的UI協議,通常有Java Servlet,JSP和JSF生成,考慮到生產的Web頁面是靜態的,可以使用Ajax技術,不過它已經超出了Java EE的范疇。
雖然Ajax和Comet方法已經被證明是非常強大的,具有活力,讓Web應用程序的易用性更好,但目前還缺乏標準和優秀的JavaScript開發工具。
雖然Oracle沒有明確這方面的具體計劃,但我猜測未來Java EE和JavaFX集成時將會解決Ajax問題。事實上,根據2009年JavaONE大會上拉里埃里森的關于Ajax和JavaFX的發言,我的猜測應該是正確的。
Java ME
Java ME是Sun的一個巨大成功,已經用于數十億各種類型的手機,它還由第三方定制用于無數的電力嵌入式解決方案。具體而言,Java ME主要由兩個產品組成:連接限制設備配置(Connected Limited Device Configuration,CLDC)和連接設備配置(Connected Device Configuration,CDC)。兩者之間的區別是它們的能力,CLDC是一個較小的子集,擁有一個非常小的虛擬機(VM),因此在能力有限的設備上運行。CDC是一個較完整的Java實現,它是為更強大的設備設計的。CDC與Java SE的字節碼兼容,即為Java SE編譯的.class文件可以在CDC JVM上運行,但CLDC就不行。
由于Java ME(CDC和CLDC)和Java SE之間的限制和差異,在Java API和庫方面也有差異,這就造成了開發分裂。為了解決這個問題,Oracle日前宣布將統一Java ME和Java SE API,徹底消除Java市場的分裂。
另外,Oracle還宣布要改善Java ME的啟動時間和整體性能,改進移動設備的電源管理,并努力支持新興嵌入式設備(MID,媒體播放器等),以及改進JavaFX和JavaFX Mobile。
JavaFX
根據拉里埃里森和其它高層(如Thomas Kurian)的表態,Oracle將會繼續支持和發展JavaFX,JavaFX是一個強大的運行時,腳本語言和工具集,讓Java開發人員更容易構建RIA應用程序。Flash/Flex和Silverlight也是RIA領域的競爭者,但JavaFX應用程序是為了滿足你生活方方面面的應用,此外,JavaFX及基于Java構建的,因此你可以在JavaFX程序中集成和使用現有Java代碼。
你可以直接在桌面計算機上,嵌入到網頁,通過Java WebStart或支持JavaFX Mobile的設備上運行JavaFX應用程序,在移動世界大會(Mobile World Congress,MWC)2009上,多家手機制造商和運營商宣布它們的手機將會支持JavaFX,但Oracle對JavaFX是如何計劃的呢?
Oracle表示它將增加JavaFX的投資,為RIA應用提供無與倫比的體驗,重點如下:
· 基于可視化組件創建一個設計范式
· 為JavaFX應用程序創建一個豐富的UI擴展庫
· 提升所有平臺的JavaFX性能
· 增強跨設備移植JavaFX應用程序的能力
· 與Java,JavaScript和HTML 5無縫集成
· 支持新興設備和UI范式(如多點觸摸)
當然,埃里森本人在去年的JavaONE大會上也暗示將會基于云的方式改造OpenOffice,基于這個原因,我猜測Oracle將會讓JavaFX成為其云戰略的主要組成部分,即使埃里森本人對云并不感冒。
開發工具
在所有Java組件中,NetBeans的前途是最不明朗的,Oracle沒有宣布具體的計劃,只是說NetBeans將會繼續作為Java開發人員的輕量級IDE,雖然說是輕量級平臺,但它的重點仍然是Java ME,Java EE和基于腳本的開發,另外還包括移動開發和動態語言編程。
但是Oracle Jdeveloper和Eclipse仍然是重點戰略級Java開發平臺,Jdeveloper是Oracle融合中間件套件的一部分,Oracle將會繼續把Eclipse IDE作為Eclipse 11g產品企業包的一部分。
我想Oracle將會把重點放在圍繞JavaFX內容制作,UI,部署,Java和JavaFX應用程序管理等新工具的開發上。我個人非常喜歡NetBeans,從2006年就開始使用它,希望Oracle能夠盡快澄清IDE的具體計劃。
總結
雖然企業的一舉一動很少影響到開發者社區,但Oracle收購Sun將在今后幾年產生深遠的影響,雖然你可能不會關心Oracle個別產品的盈利能力,但作為一名開發人員,但我想你對下面的問題一定感興趣:
· HotSpot和JRockit合并產生一個超級JVM;
· Java ME和Java SE API統一;
· 增加對JavaFX的投資,讓它適用于更多平臺;
· 繼續在JVM中集成動態語言。