色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Java能扮演嵌入式應(yīng)用開發(fā)的主角嗎?

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

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

            那么,Java作為一種在C++基礎(chǔ)上改進(jìn)了的面向?qū)ο蟮拈_源語(yǔ)言,在應(yīng)用方面能挑大梁?jiǎn)幔磕芊駷樗约簱纹鹨黄邓{(lán)的天空呢?

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

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

            1. 提高效率和可維護(hù)性

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

            2. 重復(fù)利用代碼

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

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

            3. 集成Java代碼和源代碼

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

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

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

            對(duì)程序開發(fā)人員來(lái)說,碎片真是個(gè)惡夢(mèng),因?yàn)樗槠桨谉o(wú)故的增添了代碼量和測(cè)試工作量。當(dāng)然,對(duì)移動(dòng)電話持有者來(lái)說也不是什么好事,因?yàn)樗槠牧嗽O(shè)備的空間。不管怎么說,碎片對(duì)每個(gè)人來(lái)說都是件很討厭的事情。

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

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

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

            三、 Java平臺(tái)的測(cè)試

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

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

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

             1. 測(cè)試工具包

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

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

            2. 端口兼容性

            那么如何知道設(shè)備所依賴的操作系統(tǒng)端口是兼容的 呢?沒法知道,因?yàn)椴僮飨到y(tǒng)供應(yīng)商通過沒有測(cè)試它。除非所使用的設(shè)備是標(biāo)準(zhǔn)的硬件,沒有進(jìn)行任何的客戶化工作,或是可以讓操作系統(tǒng)提供商對(duì)這特殊的端口進(jìn)行單獨(dú)的測(cè)試。相樣,采用Java平臺(tái)時(shí),這又是怎么的結(jié)果呢?可喜的是,由于Java平臺(tái)的TCK已經(jīng)做了這樣的工作,因此,這可以更好的提高其兼容性。

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

            四、Java很占內(nèi)存嗎?

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

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

            CDC(Connected Device Configuration,運(yùn)算能力相對(duì)較佳、并請(qǐng)?jiān)陔娏?yīng)上相對(duì)比較充足的嵌入式裝置,如冷氣機(jī)、電冰箱等):VM約為250K,JIT小于300K,VM+JIT+基礎(chǔ)類庫(kù)約占2-2.5M。典型的部署要求:4M-32M。

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

            Java類轉(zhuǎn)成字節(jié)碼的速度≈1/30%≈3.3x;

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

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

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

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

            五、  結(jié)論

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

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉