<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在嵌入式系統中的解決方案

Java在嵌入式系統中的解決方案

作者: 時(shí)間:2011-08-08 來(lái)源:網(wǎng)絡(luò ) 收藏
3、用于的局限及

本文引用地址:http://dyxdggzs.com/article/150399.htm

  A)性能

  如前所述、解釋字節碼比相當的C或C++寫(xiě)的程序運行起來(lái)要慢5到10倍。對一些并非受制于CPU的嵌入來(lái)說(shuō),這一個(gè)性能缺點(diǎn)不是問(wèn)題,但是更經(jīng)常的較慢的速度會(huì )導致無(wú)法接受的應答時(shí)間。有幾種可能的可緩解速度慢的問(wèn)題。

  1)使用更快、更強大的處理器,使響應時(shí)間縮小到可以接受的范圍。這個(gè)方法將增加每個(gè)系統的成本。

  2)使用母語(yǔ)編譯器來(lái)獲得比較好的性能。但這樣做,你就放棄了與Java平臺無(wú)關(guān)的優(yōu)點(diǎn),好在大多數嵌入系統都只在一種平臺上運行。

  3)在你的系統上并入一個(gè)JIT編譯器,這樣Java類(lèi)裝入時(shí)就被編譯。若你為接納JIT編譯器而不得不增加額外的內存,這個(gè)方法也會(huì )增加系統成本。另外,若你的系統各部分是按需求逐漸添加,你應控制程序裝入的時(shí)機,以使在裝入類(lèi)進(jìn)行編譯時(shí)產(chǎn)生的暫停不會(huì )影響系統的響應時(shí)間。

  B)垃圾收集的系統開(kāi)銷(xiāo)

  前面論述過(guò),Java中的自動(dòng)內存分配和垃圾收集性能是實(shí)惠的,因為它去掉了最通常的程序錯誤根源并簡(jiǎn)化了程序設計人員的工作。但是,從實(shí)時(shí)系統的角度來(lái)看,它的問(wèn)題恰好就在于它是自動(dòng)的。當垃圾收集進(jìn)行時(shí),你的控制就受限了。

  垃圾收集運行時(shí),它凍結了系統其余部分的處理。這是因為它必須要在內存中移動(dòng)對象,并必須在程序再次運行前,更新所有引用(指向)那些對象的程序變量。垃圾收集能凍結處理達數十分之一秒,具體取決于內存量和處理器的速度。很顯然,這對硬實(shí)時(shí)系統是無(wú)法接受的,甚至極端時(shí)對軟實(shí)時(shí)系統也是成問(wèn)題的。

  垃圾收集以三種方式開(kāi)啟。首先JVM有一個(gè)后臺垃圾收集線(xiàn)程,此線(xiàn)程傾向于在它一看見(jiàn)系統有空閑就開(kāi)始垃圾收集,若有事件想要喚醒另一個(gè)線(xiàn)程,后臺垃圾收集就會(huì )被該線(xiàn)程占先,但它不會(huì )立刻被占先,它得更新那些已被移動(dòng)得對象的所有引用后,才能讓一個(gè)線(xiàn)程運行。

  其次,若JVM沒(méi)找到足夠內存來(lái)滿(mǎn)足某個(gè)內存分配請求,它將啟動(dòng)一個(gè)不會(huì )被占先的垃圾收集,在該操作完成之前,系統的其余部分被禁止。

  最后,一個(gè)應用程序能通過(guò)調用Systev.gc()方法來(lái)啟動(dòng)垃圾收集。所有,如果你知道系統暫時(shí)不會(huì )執行任何時(shí)序上關(guān)鍵的任務(wù),你可以啟動(dòng)垃圾收集,并希望避免稍后在更關(guān)鍵時(shí)段進(jìn)行收集。

  C) JVM的系統開(kāi)銷(xiāo)

  我們已經(jīng)論述了許多JVM的內置特點(diǎn),比如圖形和網(wǎng)絡(luò ),它們使得你的Java程序更快上市。所有這些特點(diǎn)的負面是JVM的內存開(kāi)銷(xiāo)。因為JVM是一個(gè)整塊(要達到Java的可移植的目的,你必須完整的采納),JVM的內存占用量不能減少?,F在的JVM最少需要2MB以上的內存。

  但是如果你的Java程序也在使用一些消耗內存的功能,由于一個(gè)JVM中有那么多的功能,各個(gè)Java應用程序就能寫(xiě)的小一點(diǎn)。如果你建立的是一個(gè)從網(wǎng)絡(luò )上動(dòng)態(tài)下載并運行多個(gè)程序的系統,那么這將是個(gè)很大的優(yōu)點(diǎn)。但Java仍然不具備可配置性和可伸縮性,而這些是嵌入操作系統一直以老字號自居的特點(diǎn)。

  D)硬件訪(fǎng)問(wèn)

  Java實(shí)現可移植性的安全性的方法也意味著(zhù)它缺乏直接同硬件接口的能力。JVM僅僅是一個(gè)虛擬的機器,一個(gè)對硬件的軟件抽象,該抽象僅僅使連接是直接的。虛擬機控制與實(shí)際硬件的接口,而我們只能和虛擬機打交道。

  但這并非無(wú)法逾越的限制,很多C程序使用內嵌匯編來(lái)規避性能上的瓶頸,所以Java程序也能使用C來(lái)獲得對硬件的直接訪(fǎng)問(wèn)。

  讓Java和C一起工作有兩種方式。第一、可以使用本地方式,它們是用C/C++或另一種語(yǔ)言寫(xiě)的,但當調用時(shí),則裝入與JVM同樣的內存空間,運行于同樣的環(huán)境。因為它們被編譯成機器碼,本地方式運行更快并能直接訪(fǎng)問(wèn)硬件。本地過(guò)程與Java代碼之間通過(guò)套接來(lái)彼此交流,就像網(wǎng)絡(luò )中通信端點(diǎn)使用的套接一樣。在你選擇了混合語(yǔ)言方法后,Java的與平臺無(wú)關(guān)和安全特點(diǎn)就沒(méi)有了。

  可以考慮將前面提到的Java處理器作為軟件JVM的解釋器部分作為一種硬件實(shí)現方案。Java程序能在這些處理器上直接運行并操縱硬件,要注意Sun必需加一些特殊目的的指令給這種語(yǔ)言才能直接與這些處理器一起工作。

  E) 語(yǔ)言尚不夠成熟

  Java于1996年5月發(fā)布,幾個(gè)月就有了beta版。第一個(gè)主要修訂版,Java Development Kit(JDK)1.1在一年以后開(kāi)發(fā)出來(lái),以標準的程序設計語(yǔ)言角度來(lái)看,Java還很年輕,也很粗糙。實(shí)際上,所有通用語(yǔ)言,都要幾年時(shí)間才能夠成熟到能可靠的寫(xiě)出作為產(chǎn)品的應用程序的程度。

  在其進(jìn)一步發(fā)展中,Sun公司分了三個(gè)步驟來(lái)促進(jìn)Java成為一種通用語(yǔ)言和計算機平臺。首先,用Java編程實(shí)現現存的商業(yè)和企業(yè)的一些功能活動(dòng),諸如電子郵件、日歷和字處理程序。在這些方面,Java將與傳統的編程語(yǔ)言和傳統的編程方法競爭。其次,把Java提供給企業(yè),使他成為一種編寫(xiě)內部應用程序的方法。信息科學(xué)部門(mén)常常要用一種必須編譯的(因而是針對具體平臺的)語(yǔ)言來(lái)產(chǎn)生客戶(hù)程序,因此由于平臺不同而編譯和維護不同的版本。如使用Java,信息科學(xué)部門(mén)只需編寫(xiě)和維護一種版本。最后一步,是為傳統設備應用,比如移動(dòng)電話(huà)、機頂盒以及打印機定義Java API以及語(yǔ)言功能。

  Java開(kāi)發(fā)的編程工具也仍在發(fā)展之中。有幾個(gè)廠(chǎng)家提供編譯器和開(kāi)發(fā)工具,如Symantec、Microsoft以及Sun公司。Sun不再是JVM和JIT的僅有選擇,其他幾個(gè)供應商的產(chǎn)品也很有競爭力,這些公司在開(kāi)發(fā)檢測和調試工具上較慢。市場(chǎng)上有了一些初步的產(chǎn)品, Parasoft的Jtest軟件自動(dòng)為Java模塊生成檢測案例,而Numega的Jcheck為JVM中的程序行為提供一定的可見(jiàn)性。

  目前仍然沒(méi)有完善的交叉調試,即那種傳統上被嵌入系統開(kāi)發(fā)者用來(lái)處理目標平臺上程序的方案,你很可能必須用C/C++來(lái)寫(xiě)你的程序中針對硬件的部分。不管怎樣,你最好用一個(gè)C/C++交互調試器來(lái)調試那些代碼,并在你的目標系統上用彈出對話(huà)框,保持記錄文件,或其他類(lèi)技巧來(lái)調試你的Java。

  4、總結

  由上可見(jiàn),Java的應用是排在Sun公司日程的最后的,Sun在繼續為這些用途發(fā)展此語(yǔ)言,但對這方面的發(fā)展會(huì )次于桌面及企業(yè)用途。

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

上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: 解決方案 系統 嵌入式 Java

評論


相關(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>