Java:互聯(lián)網(wǎng)編程領(lǐng)域的過去與未來之王
譯文作為一款專門針對嵌入式計算與實時化流程場景所構(gòu)建的編程語言,Java將成為物聯(lián)網(wǎng)時代下的最佳開發(fā)選項。
對于大家來說,Java到底意味著什么?在校園里頭學習過的一款編程語言?企業(yè)IT領(lǐng)域的求職神油?抑或是將Java視為主宰互聯(lián)網(wǎng)后爆發(fā)時代的統(tǒng)治性語言?作為一款專門針對嵌入式計算與實時化流程場景所構(gòu)建的編程語言,我們將在本文中論證Java在物聯(lián)網(wǎng)時代下成為最佳開發(fā)選項的幾大理由。
從1969年至今的這段漫長時光當中,網(wǎng)絡(luò)設(shè)備已經(jīng)完成了完整的爆發(fā)式增長流程。從當初通過ARPANET實現(xiàn)對接的四臺高校計算機,如今世界上已經(jīng)有二十億人頻繁訪問互聯(lián)網(wǎng)內(nèi)容。在不久的將來,聯(lián)網(wǎng)設(shè)備數(shù)字還將迅速翻番甚至再次翻番,即由目前的數(shù)十億臺增長至嵌入式處理時代的成百上千億臺。我們生活中的方方面面都將與聯(lián)網(wǎng)設(shè)備相結(jié)合:家庭環(huán)境、辦公環(huán)境、車載環(huán)境、設(shè)備、工具以及玩具等等——大家完全可以根據(jù)實際經(jīng)歷進一步完善這份清單。
Java,面向嵌入式系統(tǒng)
十九年前,David L. Ripps曾為JavaWorld編寫了一份概述性資料,介紹了Java在嵌入式系統(tǒng)中的作用。Ripps的文章從今天的角度來看同樣極具可讀性,特別是對于那些希望了解嵌入式系統(tǒng)編程接口如何與聯(lián)網(wǎng)移動設(shè)備及物聯(lián)網(wǎng)機制協(xié)作的朋友而言。
盡管物聯(lián)網(wǎng)浪潮的席卷之勢中確實存在一部分炒作成分,但其背后的現(xiàn)實在于,互聯(lián)網(wǎng)增長將使上一代計算機制變得相對比較瑣碎。物聯(lián)網(wǎng)不僅客觀存在,而且還將給一切帶來顛覆性的改變。參考以下時間進程,我們首先對過往互聯(lián)網(wǎng)技術(shù)在不同階段中的發(fā)展軌跡作出一番回顧:
· 1982年到1989年: TCP/IP網(wǎng)絡(luò)誕生。
· 1985年到1989年: 互聯(lián)網(wǎng)技術(shù)的商業(yè)化趨勢開始出現(xiàn)。
· 1990年到1991年: 萬維網(wǎng)正式建立。
· 1990年到1998年: 傳統(tǒng)臺式計算機被重新設(shè)計為實質(zhì)層面上的聯(lián)網(wǎng)設(shè)備。
· 1996年至今:雖然進展緩慢但卻可以肯定的是,我們正逐步進入到移動聯(lián)網(wǎng)設(shè)備(即物聯(lián)網(wǎng))主導一切的新時代當中。
目前作為物聯(lián)網(wǎng)前提性條件各類補充性技術(shù)正在陸續(xù)上線。HTTP/2是一套關(guān)鍵性網(wǎng)絡(luò)協(xié)議,它的出現(xiàn)在一定程度上實現(xiàn)了機器到機器之間的通信需求。Thingsee則是開發(fā)者工具領(lǐng)域的典型代表,也標志著物聯(lián)網(wǎng)發(fā)展所需要的硬件基礎(chǔ)正逐漸成型。
硅谷智囊Tim O’Reilly已經(jīng)作出強調(diào),表示物聯(lián)網(wǎng)的成果將不僅僅是將咖啡機或者電冰箱等無關(guān)緊要的設(shè)備接入網(wǎng)絡(luò)那么單純。在理想的傳感器與自動化機制支撐之下,物聯(lián)網(wǎng)將真正將人類文明提升到新高度。而Java將在將在這場顛覆性變革中扮演主力角色。
#p#
物聯(lián)網(wǎng)的工作機制
2014年9月,Andrew C. Oliver撰寫了一篇關(guān)于物聯(lián)網(wǎng)實現(xiàn)水平與團隊協(xié)作間關(guān)系的文章。在這種情況下,團隊協(xié)作體系將由人與計算機共同構(gòu)成。
由于設(shè)備的通信對象不再局限于人、同時需要面對其它設(shè)備,因此將從根本層面帶來一系列新功能。具體而言,我們的電冰箱不僅能夠感知到用戶的西紅柿儲量即將告罄,同時也能根據(jù)個人飲食習慣發(fā)出食品訂單。普適計算的成功也恰恰體現(xiàn)在這里,其融入背景當中,并與其它設(shè)備共同完成任務(wù)、事件以及對接。只有執(zhí)行級別的結(jié)果才會被交付至使用者面前。物聯(lián)網(wǎng)的崛起將帶來大量我們前所未見、甚至難以想象的創(chuàng)新型成果,并以無縫化方式將其奉至我們手中。
很多常見的實用性案例都極具說服力。在最近的新聞當中,我們親眼見證了一系列令人印象深刻的應(yīng)用方式,包括農(nóng)業(yè)病蟲害處理、小型炸彈探測器以及提高醫(yī)療診斷水平的方案等等。物聯(lián)網(wǎng)不再是那種低調(diào)但完備的售貨機——它需要進行過量儲備并帶來繁雜的日常維護任務(wù),且一直默默等待著用戶的召喚。
當我們把自己的賬單放進這臺售貨機并按下按鈕時,它會顯示可供選擇的購買項目,并通過簡單的交互機制確保大家得到令自己滿意的食品。我們用不著了解或者認同整個實現(xiàn)過程的全部細節(jié); 我們的胃就是檢驗真理的最佳標準?,F(xiàn)在,我們有了有了物聯(lián)網(wǎng)式自動售貨機。當我們從支持物聯(lián)網(wǎng)功能的售貨機處購買商品時,購買行為會融入到全球范圍內(nèi)的完整體系當中,保證供應(yīng)商維持庫存平衡并充分維護零件工作狀態(tài),這種新模式能夠?qū)⒄w成本較前物聯(lián)網(wǎng)時代降低30%。
Java的嵌入式計算之旅
時至今日,大多數(shù)人都沒有意識到,Java在誕生早期正是針對嵌入式計算而打造。其早期版本專門針對各類家用電器,如電視機頂盒接口。James Goslin在打造Java初始版本時正是將設(shè)備間通信作為其關(guān)注重點,而他當時就想到其作用不僅要實現(xiàn)設(shè)備與人之間的通信、更要承擔起設(shè)備與設(shè)備間的通信任務(wù)。二十年之后,這些初始設(shè)計優(yōu)勢終于迎來了自己的黃金時代,物聯(lián)網(wǎng)的光輝歲月即將拉開序幕。
出色的普及水平也使其適合物聯(lián)網(wǎng)時代的實際需求。全球范圍內(nèi)投入到Java領(lǐng)域的海量資源使這款編程語言成為新生代程序員們的最愛,同時也確保了其能夠在全部以其為基礎(chǔ)的生產(chǎn)系統(tǒng)中得到良好的維護與支持。數(shù)十萬款成功的應(yīng)用程序及系統(tǒng)方案已經(jīng)充分證明了Java的強大實力。
對于希望在嵌入式編程領(lǐng)域一展身手的開發(fā)人員而言,最重要的是對Java平臺中的不同組成部分加以區(qū)分。在嵌入式編程工作中,我們無需對自己的編碼或者閱讀方式做出任何變更:出色的Java程序員能夠像查看典型桌面企業(yè)應(yīng)用程序那樣輕松閱讀嵌入式源代碼內(nèi)容。不過庫,特別是在開發(fā)(及測試)環(huán)境中,將專門面向嵌入式Java編程。請確保大家擁有適用于目標嵌入式環(huán)境的正確工作鏈。
Java對于嵌入式系統(tǒng)而言是否太過臃腫?
Java并不總是嵌入式系統(tǒng)領(lǐng)域的首選可行性編程語言,這主要是因為嵌入式設(shè)備通常在計算資源方面顯得捉襟見肘。匯編、C甚至是Python都能在有限的內(nèi)存、CPU性能以及其它硬件制約條件下提供更出色的表現(xiàn)。不過這種狀況在過去幾年當中已經(jīng)得到了顯著改善,這是因為嵌入式系統(tǒng)的資源規(guī)模已經(jīng)得到長足提升。此外,面向嵌入式環(huán)境的新型Java編譯技術(shù)方案也進一步降低了相關(guān)代碼對于系統(tǒng)資源的需求。
#p#
2015年Java嵌入式編程趨勢展望
早在1996年,Java就做好了實現(xiàn)嵌入式編程的全部準備,但當時缺乏一股足以推動業(yè)界在這方面作出探索的驅(qū)動力量。時至今日,這種勢頭開始迅速聚集,而面向嵌入式編程的Java標準及工具生態(tài)系統(tǒng)也準備好充分發(fā)揮這一技術(shù)潛能。
在2000年到2010年之間,基于Java的嵌入式或者“微”計算機制主要集中在J2ME(即Java 2平臺Micro版本)身上。如今,Java平臺Micro版本,或者稱之為Java ME,已經(jīng)成為嵌入式應(yīng)用程序中的標準運行時環(huán)境。盡管Java ME及其概念——特別是配置文件與配置(即profile與configuration)——仍然非常關(guān)鍵,但移動Java開發(fā)人員更傾向于利用Android及HTML 5實現(xiàn)用戶界面。目前移動手機設(shè)備是嵌入式計算領(lǐng)域中最突出的組成部分,而且目前所售出的移動設(shè)備中有五分之四采用Android系統(tǒng)。(雖然Android支持Java ME,但二者在產(chǎn)品生命周期上存在顯著差異,而且目前還不清楚由哪一方來決定特定嵌入式設(shè)備之上將采用哪一種下一代應(yīng)用程序環(huán)境。)
配置文件與配置是嵌入式編程工作中的關(guān)鍵性概念。像MIDP這樣的嵌入式配置文件是一套API集合,用于在設(shè)備之上獲得支持。而配置則是一套框架規(guī)范。不過我們還找不到嚴格的理論依據(jù)來證明配置文件應(yīng)當歸屬于配置范疇,其中包括CLDC與聯(lián)網(wǎng)受限設(shè)備配置在內(nèi)。(感興趣的朋友也可以點擊此處查看Jim Connors的博客以了解更多配置文件與配置在物聯(lián)網(wǎng)下應(yīng)用的細節(jié)信息。)
除了Java ME的配置文件與配置之外,另有一系列企業(yè)級Java技術(shù)具備在嵌入式領(lǐng)域大顯身手的可觀潛力。Java管理擴展(即Java Management Extensions,簡稱JMX)用于分布式資源管理與監(jiān)控,并終將有一天能夠作為嵌入式定義的有效補充。實時Java(即Real-time Java)也在物聯(lián)網(wǎng)嵌入式開發(fā)領(lǐng)域占據(jù)著重要地位。
Java的實時模型與工具
在醫(yī)療、交通、制造以及其它各行業(yè)領(lǐng)域,與傳感器及效應(yīng)器相對接的嵌入式應(yīng)用程序往往需要滿足多項實時性要求??梢灶A(yù)見,心臟起搏器、發(fā)動機控制器以及管道閥門等設(shè)備必須能夠提供正確的實時結(jié)果,這甚至關(guān)乎到使用者的生命財產(chǎn)安全——而不僅僅是惱人的堆?;厮輪栴}。
盡管James Gosling預(yù)計到了Java需要滿足各類常見的實時性要求,但Java在早期發(fā)展階段仍然不具備理想的實時計算能力。值得強調(diào)的是,大部分Java運行時環(huán)境都存在著可靠性低下、或者至少在處理垃圾回收時導致內(nèi)容一致性沖突的問題。Java實時規(guī)范(即Real-Time Specification for Java,簡稱RTSJ)及其它相關(guān)標準支持定期與不定期任務(wù)調(diào)度、任務(wù)期限規(guī)劃、CPU時間預(yù)算、垃圾收集線程等功能,并能夠確保特定任務(wù)不會受到垃圾收集所導致之延后影響,這一切都顯著解決了時態(tài)不確定性難題。RTSJ于2002年正式得到認證,并已經(jīng)開始在一部分Java虛擬機上發(fā)揮作用。
雖然RTSJ在2015年2月之前一直被列入到Java社區(qū)進程的擱置項目清單當中,但專家們在過去十年當中一直積極工作對其進行改善與更新。舉例而言,JamaicaVM就是一套由aicas GmbH支持的RTSJ實現(xiàn)方案,且目前以免費方式供用戶以教育及其它非商業(yè)性方式使用。
實時時間表
嵌入式特別是實時標準在漫長的時間周期內(nèi)已經(jīng)得到了長足發(fā)展,其改進速度遠超過一般性消費級軟件。盡管一款成功的移動應(yīng)用唷 可能在六個月之內(nèi)徹底淡出用戶視野,但嵌入式醫(yī)療設(shè)備、汽車制造以及工業(yè)類軟件往往需要以可靠方式運行數(shù)十年時間。而影響到這些應(yīng)用程序的公開標準往往需要相對較長的起草及制訂周期。
最近,甲骨文公司已經(jīng)針對實時系統(tǒng)對Java SE進行了改進,并表示Java SE較過去已經(jīng)能夠帶來更理想軟實時要求支持效果。這里所說的“軟”,至少具備兩種不同的相關(guān)意義。其一,這部分要求必須以較為平均的方式實現(xiàn),例如良好的銀行交易事務(wù)必須要在300毫秒之內(nèi)完成。這里的軟是相對于硬實時性要求而言,例如某臺機車需要在1.25秒之內(nèi)接收到應(yīng)用程序發(fā)來的特殊警報,提醒其電磁閥已經(jīng)關(guān)閉。在這一意義上,硬實時系統(tǒng)需要滿足的首要要求就是必須以可預(yù)見的方式應(yīng)對最糟糕的情況。
軟實時對于大多數(shù)嵌入式及物聯(lián)網(wǎng)應(yīng)用程序而言已經(jīng)完全足夠。對于那些要求硬實時支持的應(yīng)用程序,建議Java開發(fā)人員點擊此處閱讀JSR-302:Java關(guān)鍵性安全技術(shù)。這套規(guī)范屬于Java實時規(guī)范中的一套子集,而且其中一部分依賴于CLDC。除了其它功能,安全關(guān)鍵性Java定義自己的并發(fā)模型及實時線程。Open Group工業(yè)團隊最初于2003年開始推進Java關(guān)鍵性安全技術(shù)。說到該規(guī)范的當前狀態(tài),JSR-302規(guī)范負責人Doug Locke預(yù)計這套經(jīng)過長期醞釀的項目將于今年春季得到認證,并可能在2015年5月提供參考實現(xiàn)方案。
Java在嵌入式領(lǐng)域的未來前景
Java對于嵌入式編程作出了多項承諾,而且其在滿足即將全面爆發(fā)之物聯(lián)網(wǎng)的需求及可能性方面還有很長的發(fā)展道路要走。數(shù)百億由Java驅(qū)動的設(shè)備將在未來幾年內(nèi)成為物聯(lián)網(wǎng)網(wǎng)絡(luò)體系中的組成部分。我將在下一篇文章中就這一議題進行討論,探索在愛好者與社區(qū)背景下嵌入式Java環(huán)境中的各類具體實例,同時更深入地解讀RTSJ 2.0為何會在傳統(tǒng)之外的實時編程領(lǐng)域中給Java帶來顯著影響。
原文標題:Java: The once and future king of Internet programming