<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Java能扮演嵌入式應用開(kāi)發(fā)的主角嗎?

Java能扮演嵌入式應用開(kāi)發(fā)的主角嗎?

——
作者: 時(shí)間:2007-08-23 來(lái)源:IT168 收藏
系統設計師來(lái)說(shuō),有許多優(yōu)點(diǎn)。作為一門(mén)開(kāi)源的編程語(yǔ)言,允許面向對象編程,又沒(méi)有C中存在的嚴重問(wèn)題。運行時(shí)環(huán)境還提供了有用屬性。Java提供的內存管理功能使得編程人員不必分配及釋放內存。運行時(shí)環(huán)境甚至可以通過(guò)整合核心類(lèi)庫來(lái)簡(jiǎn)化程序分配。 但大多數應用面臨Java沒(méi)有處理好的兩大約束:沒(méi)有足夠的空間和時(shí)間。

  那么,Java作為一種在C++基礎上改進(jìn)了的面向對象的開(kāi)源語(yǔ)言,在應用方面能挑大梁?jiǎn)??能否為它自己撐起一片蔚藍的天空呢?

  一、為什么會(huì )是Java?

  對于來(lái)說(shuō),Java技術(shù)比C語(yǔ)言和匯編語(yǔ)言具有很明顯的優(yōu)越性。最顯著(zhù)的特點(diǎn)是減少了系統的和維護,增強了代碼的重利用能力,提高了Java代碼與系統原有代碼的可整合性。

  1. 提高效率和可維護性

  在項目的整個(gè)生命周期中,Java環(huán)境大大的簡(jiǎn)化了開(kāi)發(fā)和維護。由于目標環(huán)境是建立在一個(gè)虛擬機上,代碼可以很容易的編寫(xiě)、調試、分析、更改、維護。加上將來(lái)要連接的外接設備,未來(lái)的系統可能比目前的復雜很多。升級手冊也許不會(huì )在整個(gè)項目的生命周期中都能起到作 用。取而代之的是,硬件設備的可連接性使得能夠遠程管理模塊,這樣就保證了開(kāi)發(fā)人員能在產(chǎn)品上增加新的性能,同時(shí)解決了在產(chǎn)品生產(chǎn)后軟件升級和維護的問(wèn)題。

  2. 重復利用代碼

  由于嵌入式系統有特殊的需求,以及不同的專(zhuān)門(mén)硬件要協(xié)同工作,嵌入式軟件開(kāi)發(fā)者通常使用非常原始的方法來(lái)開(kāi)發(fā),有時(shí)每一個(gè)新的項目都要從頭再來(lái)一遍?,F在,隨著(zhù)嵌入式技術(shù)的成熟以及系統本身變得更大更優(yōu)化,很多人開(kāi)始對于把一個(gè)產(chǎn)品的模塊甚至是全部的應用程序用到另一個(gè)產(chǎn)品感興趣。這種可重新利用性使得"一次開(kāi)發(fā),多次利用"成為了可能。

  Java環(huán)境使得一個(gè)模塊可以只要做很少的工作就可以適應多個(gè)項目和平臺。甚至包括有時(shí)客戶(hù)需要一個(gè)新的目標板,或者采用新的硬件(CPU或外設)和軟件,或者使用不同的Linux都可以進(jìn)行移植。

  3. 集成Java代碼和源代碼

  使用源代碼明顯是指應用程序的多可用性以及代碼的重利用能力。在開(kāi)源的Java語(yǔ)言的應用中,一個(gè)設計很好的界面,或者虛擬機,或者是底層的硬件都可以很好的兼容到嵌入式系統中。盡管無(wú)法移植,對于很多功能和硬件界面來(lái)說(shuō),在本地環(huán)境下開(kāi)發(fā)的代碼也許仍然是最好的解決方案。在C、C++或者匯編語(yǔ)言中,加入標準的通信、接口模塊、用戶(hù)界面、安全特性會(huì )花費很多時(shí)間與金錢(qián)。與之相比較,Java的基本庫本身就提供了這些東西甚至還更多,這樣就可以加速開(kāi)發(fā)。

  二、Java碎片真的會(huì )有影響嗎?

  在使用JavaME CLDC進(jìn)行移動(dòng)電話(huà)開(kāi)發(fā)時(shí),人們經(jīng)常會(huì )碰到碎片這個(gè)詞。Java強調“一次開(kāi)發(fā),多次利用”,但碎片出現,卻打破了這種傳奇。于是,這就導致應用開(kāi)發(fā)人員不得不在許多不同的設備進(jìn)行應用程序的測試,甚至于不得不在應用程序中對某些特殊的設備進(jìn)行一步客戶(hù)化的工作。

  對程序開(kāi)發(fā)人員來(lái)說(shuō),碎片真是個(gè)惡夢(mèng),因為碎片平白無(wú)故的增添了代碼量和測試工作量。當然,對移動(dòng)電話(huà)持有者來(lái)說(shuō)也不是什么好事,因為碎片消耗了設備的空間。不管怎么說(shuō),碎片對每個(gè)人來(lái)說(shuō)都是件很討厭的事情。

  但對于嵌入開(kāi)發(fā)者而,碎片又意味著(zhù)什么呢?

  首先來(lái)看看碎片產(chǎn)生的根源。移動(dòng)電話(huà)行業(yè)標準本來(lái)給不同的產(chǎn)品預留了一定的自由空間,這初衷是好的。但事實(shí)上,這種預留的空間,卻導致了不同產(chǎn)品之間的沖突,不能進(jìn)行很好的兼容。這就是碎片產(chǎn)生的最根本原因。于是這種不兼容性進(jìn)而升級到了Java實(shí)現的程序里。這正是Java想花大力氣創(chuàng )建一個(gè)統一Java實(shí)現的原因所在,如JSR248,MSA(Mobile Service Architecture)的建立。

  從嵌入式開(kāi)發(fā)人員的角度來(lái)看,也許并沒(méi)有這么糟糕。其實(shí)碎片并不會(huì )影響到嵌入式開(kāi)發(fā)人員,因為已經(jīng)可以確定設備之間的硬件是完全兼容的。如果使用的是原始語(yǔ)言像C/C++的話(huà),嵌入式開(kāi)發(fā)人員可以在任何地方來(lái)編寫(xiě)代碼,并在不同的設備上進(jìn)行代碼的重用。

  三、 Java平臺的測試

  如果采用Java來(lái)實(shí)現嵌入式設備開(kāi)發(fā),會(huì )不會(huì )碰到C/C++經(jīng)常碰到的測試成本太高的難題呢?

  當然,采用Java來(lái)開(kāi)發(fā)的話(huà),可以對軟件進(jìn)行多次的重復測試,盡管這不一定是必需的。而完全需要進(jìn)行重復測試的只是那些新加的Java實(shí)現。如果是Java平臺的合法用戶(hù)的話(huà),還可以使用Sun提供的TCK來(lái)進(jìn)行程序兼容性的檢測。如果付費的話(huà),還有很多壓力測試可供選擇。只要能保證Java平臺的正常運行并按Java的測試通過(guò)了的話(huà),那么所開(kāi)發(fā)的程序其可移植性是完全可以保證的。

  當然,在此有必須有提醒一下只測試Java實(shí)現端口的開(kāi)發(fā)人員。因為有一些端口的實(shí)現有可能是采用C/C++來(lái)編寫(xiě)的,這些必須測試??梢允褂萌略O備來(lái)對整個(gè)程序進(jìn)行測試以達到這一目的。

   1. 測試工具包

  通過(guò)采用Java來(lái)進(jìn)行編程,可以確保平臺的APIs是否正確的工作。如果采用C/C++或直接對操作系統編程,則使用全新的設備時(shí),無(wú)法保證APIs的正常性。由于這些問(wèn)題取決于所采用的測試包的全面性和可靠性,因此,在開(kāi)發(fā)階段有可能發(fā)現不了它們,而在部署的階段發(fā)現了它們時(shí),問(wèn)題已經(jīng)擴散得超出控制范圍了。而對于Java平臺的測試,一般比較全面。所以,C/C++或直接對操作系統編程的問(wèn)題能比較早的被發(fā)現并解決。

  因此,采用Java平臺時(shí),其測試時(shí)間有可能跟使用C/C++來(lái)開(kāi)發(fā)整個(gè)程序的時(shí)間差不多。但結果大大不同,使用Java平臺時(shí),其最差的測試效果往往可以與C/C++環(huán)境下最好的測試效果媲美。就測試的選擇而言,采用Java平臺時(shí),可以使用Sun的TCK來(lái)確保程序對新設備的適用性,同時(shí),還可以得到Java的其它測試包,不過(guò)是收費的。然而使用C/C++時(shí),則只能依靠開(kāi)發(fā)人員自己來(lái)保證程序對新設備的適應性了。

  2. 端口兼容性

  那么如何知道設備所依賴(lài)的操作系統端口是兼容的 呢?沒(méi)法知道,因為操作系統供應商通過(guò)沒(méi)有測試它。除非所使用的設備是標準的硬件,沒(méi)有進(jìn)行任何的客戶(hù)化工作,或是可以讓操作系統提供商對這特殊的端口進(jìn)行單獨的測試。相樣,采用Java平臺時(shí),這又是怎么的結果呢?可喜的是,由于Java平臺的TCK已經(jīng)做了這樣的工作,因此,這可以更好的提高其兼容性。

  總之,采用Java平臺所需的測試,最差的情況也就跟采用原始語(yǔ)言(C/C++)一樣,但大部分情況下,都優(yōu)于后者。而且,更具有兼容性的保證。

  四、Java很占內存嗎?

  使用Java平臺進(jìn)行嵌入式設備開(kāi)發(fā)時(shí),其對內在的使用量,會(huì )不會(huì )比使用原始語(yǔ)言如C/C++更大些呢?這取決于軟件的復雜性。Java由于虛擬機和內庫的原因,有可能會(huì )導致內存開(kāi)銷(xiāo)的增大。下面比較一下Java平臺內存的占用情況(基于Sun的實(shí)現):

  CLDC(Connected Limited Device Configuration,運算功能有限、電力有限的嵌入式裝置,如PDA 、手機等):可工作于100K(RAM),JIT(Just In Time,即時(shí)編譯技術(shù))需要最大些。典型的部署要求500K-16M(RAM)。

  CDC(Connected Device Configuration,運算能力相對較佳、并請在電力供應上相對比較充足的嵌入式裝置,如冷氣機、電冰箱等):VM約為250K,JIT小于300K,VM+JIT+基礎類(lèi)庫約占2-2.5M。典型的部署要求:4M-32M。

  當然,內存的占用量還取決于應用的大小及內在的使用情況??梢钥闯?,其實(shí)Java平臺不會(huì )占用太大的內存。但是,這只是問(wèn)題的一半。另一半是,Java代碼最后部署時(shí)是以類(lèi)文件來(lái)部署的,它主要是包括字節碼和元數據。通過(guò)對CVM數據的分析,可以看出,字節碼占據著(zhù)大概30%的數據量。而采用JIT編譯的代碼相對于字節碼而言,可以發(fā)現,內存的占有量增加了,并有一個(gè)7-8倍的ARM指令集。由于,可以估計:

  Java類(lèi)轉成字節碼的速度≈1/30%≈3.3x;

  原始語(yǔ)言轉成字節碼的速度≈7x。

  這意味著(zhù),Java代碼的內存使用量約為原始語(yǔ)言代碼的一半。當然這只是非常粗略的估算,但卻是合理的估算。

  使用Java的JIT后,只有那些使用頻率高的代碼才會(huì )被編譯。而在系統中只是偶然被執行的代碼則采用解釋來(lái)編譯。同時(shí),JIT盡量使被編譯的代碼其內存占有量保持在一較小的范圍內。對CVM(CDC所使用虛擬機),默認值為512K。而在一些較優(yōu)秀的程序中,可以發(fā)現,其值為100K-300K。

  這也就是說(shuō),使用Java編寫(xiě)的程序,只有使用頻率比較高的代碼才導致內存占用的增加。相反,使用C/C++編寫(xiě)的程序,整個(gè)代碼都需要進(jìn)行編譯。因此,不能說(shuō)使用Java語(yǔ)言編寫(xiě)的程序占用的內存就會(huì )比使用C/C++編寫(xiě)的程序大。這決定于軟件相對于平臺代碼的復雜度及大小。如果軟件規模比較大,Java平臺所消耗的內存遠小于Java類(lèi)文件簡(jiǎn)潔性節約的內存,這種情況下,使用Java平臺將有利于節約內存。如果軟件的規模比較小,則Java平臺消耗的內存就比較明顯了,可以考慮使用C/C++來(lái)開(kāi)發(fā),以節約內存。

  五、  結論

  Java語(yǔ)言最初的設計企圖是想用于控制消費性電子產(chǎn)品,本為嵌入式設備而設計,但隨著(zhù)因特網(wǎng)的興起,Java在臺式機和服務(wù)器端的應用開(kāi)發(fā)中取得了巨大的成功。Java在應用中充分展示其通用性與完全性等優(yōu)勢,而這在嵌入式設備的應用開(kāi)發(fā)中是至關(guān)重要的,這使得Java重返嵌入式應用開(kāi)發(fā)領(lǐng)域成為必然。STK Java卡和的成功應用昭示著(zhù)Java在嵌入式系統應用開(kāi)發(fā)中的美好前景。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>