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