Java對你而言是什么易遣?一門你大學(xué)里學(xué)過的語言彼妻?一個IT行業(yè)的通用語言?你相信Java已經(jīng)為下一次互聯(lián)網(wǎng)爆炸做好了準(zhǔn)備么豆茫?Java 一方面為嵌入式計算做了增強(qiáng)侨歉,而另一方面為實時應(yīng)用做了精簡,本文將介紹為什么 Java 是IoT(物聯(lián)網(wǎng))開發(fā)的最佳語言揩魂。
為嵌入式計算增強(qiáng)幽邓、為實時系統(tǒng)精簡——為什么 Java 是最適合 IoT 的語言
自1969年至今,我們可以看到網(wǎng)絡(luò)設(shè)備爆炸式的增長:從最初四個大學(xué)的計算機(jī)群構(gòu)建成的ARPANET火脉,直到現(xiàn)今互聯(lián)網(wǎng)上有兩億活躍用戶牵舵。而不久之后的將來這一數(shù)字將會呈指數(shù)級的增長柒啤,從幾億臺設(shè)備到數(shù)十億嵌入式處理設(shè)備。我們生活的方方面面都將通過網(wǎng)絡(luò)設(shè)備接入互聯(lián)網(wǎng):家庭畸颅、工作場所担巩、汽車、家電没炒、工具涛癌、玩具——一切由你說了算。
(譯者注:美國高等研究計劃署網(wǎng)絡(luò) Advanced Research Projects Agency Network送火,美國國防高等研究計劃署開發(fā)的世界上第一個運營的封包交換網(wǎng)絡(luò)拳话,它是全球互聯(lián)網(wǎng)的始祖。最初由西海岸的四個節(jié)點漾脂, 加州大學(xué)洛杉磯分校(UCLA)假颇、斯坦福研究院(SRI)胚鸯,加州大學(xué)圣巴巴拉分校(UCSB)和猶他大學(xué)(UTAH)構(gòu)成)
為嵌入式系統(tǒng)打造的Java
十九年前骨稿,David L. Ripps 為 JavaWorld寫了一篇介紹Java和嵌入式系統(tǒng)相關(guān)的文章。如果你想要明白嵌入式系統(tǒng)編程姜钳、移動互聯(lián)設(shè)備坦冠、物聯(lián)網(wǎng)三者之間的相互協(xié)作,Ripps 的文章依然是非常受用的哥桥。
雖然時下關(guān)于物聯(lián)網(wǎng)(Internet of Things)的閑談有部分炒作之嫌辙浑,但本質(zhì)上來說,下一刻在互聯(lián)網(wǎng)中將要發(fā)生的改變拟糕,會使前幾代信息處理技術(shù)黯然失色判呕。物聯(lián)網(wǎng)不只是流口常談之物,而是改變世界的新技術(shù)送滞。參考下面的時間線侠草,這展示了如我們所知的那些互聯(lián)網(wǎng)中的引爆點:
1982年到1989年:TCP/IP網(wǎng)絡(luò)誕生。
1985年到1989年:互聯(lián)網(wǎng)商業(yè)化開始出現(xiàn)犁嗅。
1990年到1991年:萬維網(wǎng)正式建立边涕。
1990年到1998年:傳統(tǒng)計算機(jī)真正意義上被重新設(shè)計為互聯(lián)網(wǎng)設(shè)備。
1996年至今:雖然緩慢但確信的是褂微,我們步入了由移動互聯(lián)網(wǎng)絡(luò)設(shè)備(即物聯(lián)網(wǎng))“統(tǒng)治”的時代功蜓。
物聯(lián)網(wǎng)的補(bǔ)充技術(shù)正在陸續(xù)上線。HTTP/2作為新版的關(guān)鍵網(wǎng)絡(luò)協(xié)議宠蚂,在一定程度上將適應(yīng)機(jī)器到機(jī)器的通訊式撼。Thingsee 則是物聯(lián)網(wǎng)開發(fā)套件的先驅(qū),它提供了物聯(lián)網(wǎng)開發(fā)所需的硬件求厕。
硅谷智者 Tim O’Reilly 作出強(qiáng)調(diào)說著隆,物聯(lián)網(wǎng)的成果遠(yuǎn)不只是將咖啡機(jī)叠洗、電冰箱這種無關(guān)緊要的設(shè)備接入網(wǎng)絡(luò)。在充足的傳感器和自動化設(shè)備的支撐下旅东,物聯(lián)網(wǎng)無疑將會是人類的巨大進(jìn)步灭抑。Java 在即將到來的變革中將承擔(dān)主力軍的角色。
物聯(lián)網(wǎng)是怎么工作的
2014年9月抵代,Andrew C. Oliver撰寫了這樣一篇文掌腾节,在實現(xiàn)層面討論了網(wǎng)聯(lián)網(wǎng)在團(tuán)隊協(xié)作中的重要性。在這種情況下荤牍,團(tuán)隊協(xié)作將同時凝結(jié)人類與計算機(jī)案腺。
由于設(shè)備不只是和人類用戶溝通,也需要和其他設(shè)備溝通康吵,從根本上新的功能出現(xiàn)了——冰箱不僅能夠知道你的番茄用完了劈榨,它還可以以你的名義訂購更多。普適計算的成功之處在于晦嵌,計算機(jī)將退居“幕后”同辣,與其他連接的設(shè)備一起運算出實事與事件及解決方案。只有可執(zhí)行級別的結(jié)果將會被提交給用戶惭载『岛互聯(lián)網(wǎng)的成就將使我們不再考慮過多,因為物聯(lián)網(wǎng)無縫地為我們解決了一切描滔。
最平凡的例子往往是最有說服力棒妨。在最近的新聞當(dāng)中,我們親眼見證了一系列令人印象深刻的物聯(lián)網(wǎng)應(yīng)用方式含长,包括農(nóng)業(yè)害蟲處理券腔、小型炸彈嗅探器以及醫(yī)療診斷技術(shù)的進(jìn)步等。想想卑微的自動販賣機(jī)的代替品——它適量地存儲拘泞、被妥善地維護(hù)纷纫,永遠(yuǎn)默默地等待著你的命令。
當(dāng)你將你的賬單放進(jìn)一臺自動販賣機(jī)并按下按鈕執(zhí)行你的購買時田弥,會有幾種交互機(jī)制以確認(rèn)能滿足你的饑餓涛酗。你不需要理解或是認(rèn)同整個實現(xiàn)過程,你的胃會對結(jié)果非常滿意⊥迪茫現(xiàn)在商叹,我們有了具備物聯(lián)網(wǎng)功能的自動販賣機(jī)了。當(dāng)你在啟用物聯(lián)網(wǎng)的自動販賣上購買時只泼,你的購買將會觸發(fā)遍布全球的操作以保持庫存的均衡剖笙、部件的妥善維護(hù),這種新模式較前物聯(lián)網(wǎng)模式降低了30%的總成本请唱。
Java的嵌入式計算之旅
現(xiàn)在只有少數(shù)人意識到 Java 是為嵌入式計算打造的語言弥咪。它的早期版本用意明確地劍指諸如電視機(jī)頂盒接口一類的家用電器过蹂。James Gosling (Java 之父)關(guān)于最初的設(shè)想是以設(shè)備間通信為核心的,他設(shè)想 Java 不僅僅被用于設(shè)備到用戶的通信聚至,同時也被用于設(shè)備到設(shè)備的通信酷勺。二十年之后,這些初始設(shè)計優(yōu)勢已經(jīng)準(zhǔn)備好來支持物聯(lián)網(wǎng)了扳躬。
Java 的普適性也使之非常好地適應(yīng)物聯(lián)網(wǎng)脆诉。來自世界各地的大量的資源傾注于將 Java 傳輸給新一代程序員,并確保它已經(jīng)被維護(hù)——以支持所有依賴于之的產(chǎn)品系統(tǒng)贷币。數(shù)以十萬計的成功的應(yīng)用程序和系統(tǒng)已經(jīng)證明了 Java 的才能击胜。
對于探索嵌入式編程的開發(fā)人員來講區(qū)分Java平臺的部分是很重要的。沒必要為嵌入式開發(fā)做出編寫或閱讀程序的改變:好的 Java 程序員可以很容易地閱讀嵌入式系統(tǒng)的源代碼役纹,像他們閱讀典型的桌面企業(yè)應(yīng)用一樣偶摔。不過庫和開發(fā)環(huán)境(特別是開發(fā)和測試的環(huán)境)是為嵌入式 Java 編程所定制的。確保你有正確的嵌入式開發(fā)環(huán)境促脉。
Java 對嵌入式系統(tǒng)來說是否過于龐大辰斋?
因為嵌入式設(shè)備對于計算性能總是捉襟見肘,Java 往往不是嵌入式開發(fā)的第一選擇嘲叔。匯編亡呵、C 甚至是 Python 都能在局限的內(nèi)存抽活、低功率的 CPU 或是有其他硬件限制的系統(tǒng)上更能吃得開硫戈。然而,隨著嵌入式環(huán)境平均水平的增長下硕,近些年來這種妨礙已經(jīng)逐漸在消失丁逝。嵌入式環(huán)境下新的 Java 編譯技術(shù)的采用也使資源需求也有所縮減。
2015年 Java 嵌入式開發(fā)的展望
Java 早在 1996 年就有了進(jìn)行嵌入式編程的資質(zhì)梭姓,然而缺乏勢頭霜幼。今天這種趨勢發(fā)展迅速,一套為嵌入式打造的生態(tài)系統(tǒng)——包含 Java 標(biāo)準(zhǔn)和工具——已經(jīng)蓄勢以待誉尖。
在 2000 年到 2010 年間罪既,基于 Java 的嵌入式或“微”計算集中在 J2ME (Jave 2 Platform, Micro Edition)是一個普遍事實。現(xiàn)在铡恕, Java 平臺琢感,微型版本或者說 Java ME已經(jīng)是標(biāo)準(zhǔn)的嵌入式應(yīng)用運行環(huán)境了。盡管Java ME和它的概念——特別是profiles和configurations ——依然非常關(guān)鍵探熔,但移動 Java 開發(fā)者往往更專注于Android和HTML5的用戶界面驹针。移動電話是最常見的嵌入式計算機(jī),現(xiàn)在銷售的手機(jī)大約有五分之四基于安卓系統(tǒng)诀艰。(雖然 Android 支持 Java ME柬甥,但這兩個有不同的產(chǎn)品生命周期饮六,而且尚不清楚誰將決定什么會是下一代實際嵌入式設(shè)備的應(yīng)用程序環(huán)境)。
(譯者注: profiles 常譯作簡表苛蒲,是某個行業(yè)或某個領(lǐng)域內(nèi)的特性概括卤橄,每套簡表專門針對某一類設(shè)備皆刺;configurations 常譯作配置轮蜕,Java ME引入了配置的概念蒋纬,屏蔽了不同硬件設(shè)備的物理特性)
簡表(profiles)和配置(configurations)在嵌入式編程中是非常關(guān)鍵的概念寸齐。一個像MIDP(Mobile Information Device Profile痊土,移動信息設(shè)備配置文件)這樣的嵌入式簡表是一套 API 的集合葫笼,用于支持相關(guān)的設(shè)備贤重。而配置則是一套框架規(guī)范飞蛹。不嚴(yán)謹(jǐn)?shù)貙⑴渲每醋魇呛啽淼乃鶎傺梗苍S有助于理解簡表這一概念厂抖,包括最顯著的 CLDC (Connected Limited Device Configuration)或稱之為有線連接設(shè)備配置也符合這一所想。(見 “Jim Connors’ Weblog” 以了解更多有關(guān)應(yīng)用于物聯(lián)網(wǎng)的簡表和配置)克懊。
除了 Java ME 的簡表和配置之外忱辅,一小撮企業(yè)級 Java 技術(shù)持有嵌入式開發(fā)的潛力。用于分布式資源管理與監(jiān)測的Java 管理擴(kuò)展 (即JMX Java Management Extensions)可以在有朝一日完整地補(bǔ)足嵌入式的定義谭溉。Real-time Java (實時 Java)在物聯(lián)網(wǎng)嵌入式編程中也占據(jù)著重要地位墙懂。
Java 的實時模型與工具
在醫(yī)療、運輸扮念、制造和其他行業(yè)中损搬,連接傳感器與效應(yīng)器的嵌入式應(yīng)用程序?qū)τ趯崟r要求非常高」裼耄可預(yù)測的巧勤、準(zhǔn)確的結(jié)果對于心臟起搏器、 發(fā)動機(jī)控制器弄匕,管道閥門等等都關(guān)乎生死颅悉,而不只是惱人的堆棧回溯迁匠。
雖然 James Gosling 想讓 Java 去完成普遍的實時要求剩瓶,但在早年間實時并不是 Java 的強(qiáng)項。尤其是很多 Java 運行時(Java Runtimes)聲名狼藉城丧,全因為它們并不可靠或者至少也在處理垃圾回收的時候不協(xié)調(diào)延曙。RTSJ(Real-Time Specification for Java,即 Java 實時規(guī)范)以及相關(guān)標(biāo)準(zhǔn)用以處理這些事件的時間不確定性——定期或零星的任務(wù)調(diào)度芙贫、任務(wù)期限和 CPU 時間預(yù)算搂鲫、垃圾收集線程、啟用某些任務(wù)以避免垃圾收集延遲的定量供給磺平。RTSJ 被批準(zhǔn)于2002年魂仍,已經(jīng)被許多Java虛擬機(jī)實現(xiàn)拐辽。
雖然RTSJ在2015年2月之前一直被Java社區(qū)進(jìn)程(Java Community Process)列為擱置項目,但過去十年中專家們一直積極地對其進(jìn)行改善與更新擦酌。舉例而言俱诸,JamaicaVM 就是一套由 aicas GmbH 支持的RTSJ實現(xiàn)方案,現(xiàn)在免費提供給教育或其他非商業(yè)用途使用赊舶。
實時系統(tǒng)的時間線
嵌入式尤其是實時標(biāo)準(zhǔn)發(fā)展的時間線普遍較典型消費軟件長的多睁搭。一個成功的移動 App 可能在六個月間達(dá)到峰值并消失出視線,而在醫(yī)療設(shè)備笼平,汽車和工廠的嵌入式軟件往往需要幾十年的可靠運行园骆。而影響這些應(yīng)用程序的已發(fā)布標(biāo)準(zhǔn)相應(yīng)地需要更長時間來起草。
最近 Oracle 推出了Java SE 實時系統(tǒng)寓调,暗示著Java SE 已經(jīng)被充分增強(qiáng)以滿足“軟”實時要求锌唾。“軟”在這里至少有兩個截然不同的含義夺英。一是要求有軟件有平均水平的性能表現(xiàn)晌涕,例如,一次普通的銀行交易在 300 毫秒內(nèi)被發(fā)送就足夠好了痛悯。 “硬”實時要求是完全不同的余黎,例如某個機(jī)動電磁閥,在應(yīng)用程序接收警報的四分之一秒內(nèi)關(guān)閉都是最壞情況载萌【宀疲“硬”實時的最關(guān)鍵要求在這種意義上來講,即是最壞情況能被預(yù)測炒考。
對很多嵌入物聯(lián)網(wǎng)的應(yīng)用來講可缚,“軟”實時是完全合格的。對于需要硬實時支持的應(yīng)用程序斋枢,Java 開發(fā)人員很大程度上轉(zhuǎn)向 JSR-302:安全關(guān)鍵型的 Java 技術(shù)。這個規(guī)范是 Java 實時規(guī)范的一個子集知给,它部分依賴于 CLDC瓤帚。除了其他特性之外,安全關(guān)鍵型的 Java 定義了自己的并發(fā)模型和實時線程涩赢。The Open Group 最初在 2003 年開始致力于安全關(guān)鍵型 Java 的工作戈次。今春在被問及該規(guī)范的狀況時,JSR 302 規(guī)范的主管 Doug Locke估計在長期的醞釀后筒扒,在 2015 年 5 月初將會有一個規(guī)范被認(rèn)證怯邪,其中包含一套實現(xiàn)方式的參考。
嵌入式 Java 的未來前景
Java 在嵌入式編程中有諸多期許花墩,而為使之能夠滿足即將到來的物聯(lián)網(wǎng)大爆炸中的需求與契機(jī)悬秉,還有長遠(yuǎn)的路要走澄步。未來幾年中,數(shù)百億美元的 Java 驅(qū)動的設(shè)備將作為物聯(lián)網(wǎng)的一部分被投入使用和泌。我下一篇相關(guān)話題的文章會分別以愛好者和商業(yè)環(huán)境為例村缸,列舉 Java 嵌入式編程的具體實例,并更加深入地解釋為何 RTSJ 2.0 對 Java 實時編程的影響會遠(yuǎn)遠(yuǎn)超越傳統(tǒng)領(lǐng)域武氓。
轉(zhuǎn)自:碼農(nóng)網(wǎng)