迄今為止,實時Java往往還是“軟”實時。正如Aneas公司戰(zhàn)略聯(lián)盟總監(jiān)Anders Flodin說的那樣,“Java短期內(nèi)不會用于有航天飛機的項目中,因為這仍然存在很大風險。”
在機器人和工業(yè)控制、光纖光電開關、遙感設備和機頂盒的應用中,Java正開始蠶食傳統(tǒng)上由C語言代碼主導的市場。“雖然在它是否實時這一點上頗有爭議,但Java在嵌入式領域所占的百分比每年都有些許增長。”市場研究公司Venture Development的分析師Steve Balacco說,“根據(jù)我的理解,軍方是實時Java早的采用者之一。”
早在2005年初,Venture Development公司就調(diào)查了大約500名嵌入式應用開發(fā)人員,而當時只有9%的受調(diào)查者表示他們從事的項目涉及Java虛擬機器(JVM),這部分人中又有46%表示他們的研究涉及實時性方面。
在一些軍事項目中,例如美國海軍DDX戰(zhàn)艦或五角大樓計劃創(chuàng)建一個網(wǎng)絡化戰(zhàn)場,把士兵與指揮官連接在一起,Java就可以在這個實時應用中發(fā)揮一定作用。數(shù)據(jù)必須被采集和傳送,而且決策必須得到迅速的交流。“軍事項目涉及的是‘由多個系統(tǒng)組成的系統(tǒng)’,它們要彼此互連,其中部分系統(tǒng)還是實時的。”Balacco說。
實時Java項目不斷增長
Aonix公司的首席技術官Kelvin Nilsen認為實時Java從總體上看是在茁壯成長。“Aonix大約一半的新業(yè)務來自軍方,”他說,“在軍事領域的無人駕駛飛機和其它新部署的系統(tǒng)中,實時Java都有著強勁增長的勢頭。另外在遠程信息系統(tǒng)領域,包括商業(yè)應用和軍事應用,實時Java也表現(xiàn)活躍。”
Nilsen說:“軍方的目標為是每位戰(zhàn)士配備一個背包,充分利用可用帶寬,提高安全和數(shù)字通信能力,有效地利用各種數(shù)據(jù)。Java提供了一條使這些功能實現(xiàn)自動化的更快捷路徑。”
“軍方合同商使用Java是公開的秘密,他們正在研究實時Java。”Objective接口系統(tǒng)公司的銷售和行銷副總裁Joe Jacobs說,“尚不清楚他們在系統(tǒng)內(nèi)部使用了哪些Java工具。但目前Java一直用于這些系統(tǒng)的非核心方面,不用于渦輪控制,也不用于航空電子設備。”
圖:存儲器方面的改進提高了Java的預測能力,但需要更多的分析以達到硬實時目標。
Java市場曾經(jīng)在2004年6月出現(xiàn)一次飛躍。當時在Sun公司的JavaOne大會上,該公司針對其Project Mackinac項目推出了名為Sun Java實時系統(tǒng)(RTSJ)的商業(yè)化產(chǎn)品。
Greg Bollella是Sun公司一位杰出的工程師,他曾在IBM從事過實時Java的研究,后來一直領導著Sun公司的實時Java項目。Bollella透漏Sun公司Java RTS的實現(xiàn)是基于Solaris 10操作系統(tǒng),對于基于Sparc的雙處理器工作站,它的延遲在10到20微秒之間。單處理器的系統(tǒng)響應時間要更慢些,具體數(shù)值取決于設備驅(qū)動器的數(shù)量和類型、PCI插槽占用數(shù)目和其它一些因素。
當被問及Sun公司會支持哪些處理器時,Bollella提到了X86或PowerPC平臺。“在公司內(nèi)部,個問題就是熱門的JVM是否可移植到某種操作系統(tǒng)和硬件組合。”他說,隨后又補充道,某些32位組合已經(jīng)被移植。Sun公司計劃支持一系列開發(fā)平臺,它們有多種的硬件尺寸和不同的“瞬態(tài)能力”需求,即延遲和抖動時間。
該公司還在考慮定價模式,他表示,但是由于許多客戶的項目種類不同,需要進行單獨的合同談判,而不能嚴格地按每個項目固定價格這種欠靈活的方式銷售。
Bollella表示Java RTS是一個先進的、統(tǒng)一的實時應用開發(fā)平臺,這意味著它具有實時調(diào)度技術。同時也意味著它采用了面向?qū)ο蟮脑O計方法,而不僅是程序代碼。
Java RTS支持非實時和實時線程的混合,而且它將得到一套現(xiàn)代工具集的支持,即可采用Netbeans工具也可采用基于Eclipse的開發(fā)工具。該產(chǎn)品的特性包括對異步事件進行控制和支持異步傳輸?shù)目刂啤?
Bollella表示,統(tǒng)一意味著工程師可以用Java完成全部編程工作,而不是在C、C++和Ada之間對項目進行分解。程序員應該用常規(guī)的Java進行非實時編碼,為軟實時部分實現(xiàn)實時線程,隨后使用無需碎片整理(garbage collection,GC)的“無堆積”實時線程,從而保證確定性的行為。碎片整理是指把不再占用的動態(tài)分配存儲器釋放出來的過程。它對響應時間的影響一直是Java專家爭論不休的重要議題。
Aicas公司首席執(zhí)行官James Hunt認為:“Sun公司Java RTS的發(fā)布對我們來說不是壞消息,因為它提高了大家對實時Java的興趣。與前一年相比,我們現(xiàn)在的項目增加了許多。”
Aicas公司參與了歐盟開發(fā)下一代軍用飛機的Hydras項目。該公司的美國分公司正在同美國軍方合同商進行實時Java項目的合作。有幾個合同商正在從事高性能的任務,它們不允許出現(xiàn)碎片整理和其它功能造成的時間延遲。
IBM是將Java用于企業(yè)應用的領頭羊,該公司目前正同Apogee密切合作以便在嵌入式市場上推廣Java。IBM嵌入式軟件業(yè)務開發(fā)部總監(jiān)Steve Gruber透露,他們兩家公司一直在與幾個需要某種實時響應特性的客戶一起從事項目開發(fā)。IBM在世界好幾個地方都有實時Java項目,的一個是在英國的Hursley,項目的種類從工業(yè)控制到機頂盒和通信設備。
碎片整理問題
Aneas公司的Flodin提及Sun公司、IBM和其它一些公司正在用一些新的碎片整理算法來改進Java的性能。
“我認為實時Java將用于可以容忍故障的系統(tǒng)之中,”Anders說,他指的是實時系統(tǒng)的偏軟件形式。
但是,Bollella表示Sun公司的Java RTS產(chǎn)品在碎片整理改進方面有重大進展,允許擅長實時編程的編程師在Java內(nèi)部處理硬實時應用。“從總體上看,我們認為具有這個領域經(jīng)驗的應用程序開發(fā)人員不一定非要考慮Java RTS之下的煩雜細節(jié)。”他說。
但他也指出:“實時編程很困難,要求在考慮實時碎片整理和預測邏輯的執(zhí)行時間時要進行基本的工程平衡與折衷。”
因為Java RTS把實時和非實時代碼混在一起,所以開發(fā)人員可以用常規(guī)的Java開發(fā)數(shù)據(jù)吞吐量部分,隨后用碎片整理技術達到低停頓時間,這種把工作分成幾個小部分來做的方法使得碎片整理不太引人注意,Bollella說。
此外,Java RTS內(nèi)部的實時碎片整理器已經(jīng)調(diào)節(jié)了相關按鈕,用來指導有多少工作必須在特定的間隔內(nèi)完成。當預測能力必須化時,編程師要處理一個具有不同類型存儲器堆的“異類參考空間”,包括性的存儲器和不同版本的區(qū)域性存儲器(scoped memory)。
“在這些情況中,實時碎片整理器和線程也許要處理不同的存儲器堆。某些存儲器堆或許整理器不會去動。”Bollella說。
在Java RTS中,存在一個實時碎片整理器停止操作的點,減少了因整理工作歸零而帶來的開銷,但是需要更多的分析。
“由于需要調(diào)節(jié)實時整理器的按鈕來指示整理器何時運行,以及運行多久,所以程序師必須有調(diào)節(jié)值才能調(diào)整它們。”他說,“為了做到這點,程序師不得不搞清楚應用程序有多少時間花在碎片整理上。”
實時編程極具挑戰(zhàn)性,因為程序師必須要做一些額外的事情,Bollella繼續(xù)說道,隨著預測能力的改進,編程模型的復雜度增加了。這就要求必須進行更多的分析并做一些額外的工作使得這些分析更易處理。當程序師面對區(qū)域存儲器時,將不得不考慮更多事情。”