www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件

摘要:本文詳細(xì)分析了Java語言用于嵌入式系統(tǒng)的優(yōu)點(diǎn)和缺點(diǎn),并針對(duì)其不足提出了可行的解決方案。

關(guān)鍵詞:嵌入式系統(tǒng)Java

一、引言

Java語言最初的設(shè)計(jì)企圖是想用于控制消費(fèi)性電子產(chǎn)品,Java的設(shè)計(jì)者企圖建立一個(gè)簡(jiǎn)單的、面向?qū)ο蟮?、智慧的、已?jīng)解譯的、強(qiáng)大的、安全的、架構(gòu)合理的、可移植的、高性能的、多線程的、動(dòng)態(tài)的語言。為使Java對(duì)開發(fā)者有吸引力,Sun公司融合了類似于C語言的語法和結(jié)構(gòu)。然而Sun最終沒有達(dá)到這個(gè)目標(biāo),Java還是被證明不適合小型的電子設(shè)備,這很大程度是因?yàn)樗蠖宜俣嚷?。?yīng)用Java程序所需要的處理能力和內(nèi)存量,對(duì)這類設(shè)備來說太昂貴了。

然而,Sun公司設(shè)計(jì)Java時(shí)最重要的是平臺(tái)無關(guān)及網(wǎng)絡(luò)集成。一個(gè)無須更改能夠在幾種不同硬件和軟件平臺(tái)運(yùn)行的程序,對(duì)網(wǎng)絡(luò)環(huán)境來說是一個(gè)理想的程序。對(duì)想建立通過網(wǎng)絡(luò)來通訊并利用網(wǎng)上資源的分布式程序的開發(fā)者來說,一種在任何平臺(tái)上都有內(nèi)置的和標(biāo)準(zhǔn)的網(wǎng)絡(luò)支持的語言是一個(gè)大實(shí)惠。并且在Java發(fā)展的后來階段,對(duì)新興的商業(yè)化Internet的興趣達(dá)到了狂熱的程度。因此Sun公司便借機(jī)大力宣揚(yáng)Java是為Internet設(shè)計(jì)的。越來越多的人已經(jīng)把Java視為將使Internet功能更上一層樓的工具。

1、Java語言與嵌入式

對(duì)于選用嵌入式編程語言,一般說,越是高級(jí)的語言,其編譯和運(yùn)行庫施加的開銷越大,你的應(yīng)用程序也越大,越慢。已經(jīng)公認(rèn)用匯編語言能寫出最小最快的程序,其次是用C或Forth,接下來較大的是C++或Basic,然后才是Java。因此一般來說,編程人員都會(huì)首選匯編和C,而然后才會(huì)考慮C++或Java。

但是嵌入式開發(fā)者為何要來關(guān)注Java呢?筆者以為,隨著不斷增長(zhǎng)的市場(chǎng)需求,很多嵌入設(shè)備必須適應(yīng)網(wǎng)上交流的需要,為了迎合此要求,考慮這種到開發(fā)Internet應(yīng)用程序的便利,眾多開發(fā)者都發(fā)現(xiàn)使用這種語言是有意義的。另一個(gè)原因是隨著內(nèi)存條及32位處理器價(jià)格的下降,最初在嵌入系統(tǒng)使用Java太昂貴的問題不再有了。隨著使用Java的成本代價(jià)減少,它的很多優(yōu)點(diǎn)應(yīng)當(dāng)被考慮作為嵌入平臺(tái)。

2、Java對(duì)于嵌入式的優(yōu)點(diǎn)分析

Java語言的優(yōu)點(diǎn)在于:它當(dāng)初就是由理解和信奉網(wǎng)絡(luò)計(jì)算夢(mèng)想的一個(gè)小巧而專注的開發(fā)組設(shè)計(jì)的,雖然該語言最初的實(shí)施方案有點(diǎn)缺陷,有許多后來已被解決了,但為了這個(gè)夢(mèng)想,他們很少在技術(shù)上妥協(xié),結(jié)果誕生了一種專為以相互通訊為主要目的的設(shè)備而設(shè)計(jì)的語言。

有許多技術(shù)上的優(yōu)點(diǎn)都可能會(huì)引導(dǎo)嵌入系統(tǒng)開發(fā)者選擇Java,以下就是這些優(yōu)點(diǎn)(其中有幾個(gè)也適用于通用編程)

A)與處理器無關(guān)

Java的第一個(gè)優(yōu)點(diǎn)就是與處理器無關(guān),這個(gè)優(yōu)點(diǎn)似乎與嵌入式系統(tǒng)沒什么相干。傳統(tǒng)上,嵌入程序就是針對(duì)特定的微處理器設(shè)計(jì)并在其上運(yùn)行的,而C語言程序的可移植性則可通過編譯或交叉編譯來保障。

但是在Sun公司的模型中,一個(gè)程序可能是存儲(chǔ)在一個(gè)系統(tǒng)上,而被下載并運(yùn)行在另一個(gè)完全不同的系統(tǒng)上;設(shè)備可能從不同地方下載一些程序來在一個(gè)處理器上運(yùn)行,或者不同的處理器運(yùn)行一個(gè)程序,通過網(wǎng)絡(luò)在相互間傳遞數(shù)據(jù)。使用Java,一個(gè)嵌入式系統(tǒng)就可能成為一個(gè)通用的通信設(shè)備,能下載并運(yùn)行能完成特定任務(wù)的程序。

對(duì)嵌入式系統(tǒng),這是一個(gè)新的模型,已經(jīng)有一些開發(fā)者正在向它靠攏。例如,電視機(jī)機(jī)頂盒的供應(yīng)商已宣布并入JVM,以使用戶能通過Javaapplets在他們觀看電視的同時(shí)接收到的支持該電視節(jié)目的一些內(nèi)容。這樣你在觀看足球比賽時(shí),看到的支持內(nèi)容就可以是對(duì)球員的技術(shù)統(tǒng)計(jì);若你在看電影,看到的支持內(nèi)容就可以是演員的背景資料。JVM還被并入到移動(dòng)電話中,這樣用戶可接收股票報(bào)價(jià)信息、比賽分?jǐn)?shù)及其他即時(shí)信息。

筆者以為,這是一個(gè)恰當(dāng)?shù)脑O(shè)計(jì)和實(shí)施模型。其一是你在選擇開發(fā)平臺(tái)時(shí)更加靈活了。你無需在與目標(biāo)相同的平臺(tái)上開發(fā),也不用去關(guān)心交叉編譯,因?yàn)镴ava字節(jié)碼能在任何有JVM的操作系統(tǒng)中運(yùn)行;另一個(gè)優(yōu)點(diǎn)是:幾乎所有的檢測(cè)和調(diào)試可以獨(dú)立于目標(biāo)設(shè)備來進(jìn)行。但是,一些數(shù)據(jù)輸入和硬件交互要求在目標(biāo)(或是很好的仿真系統(tǒng))上測(cè)試。由于個(gè)別JVM有時(shí)有兼容性的問題,你應(yīng)該在所有將用到該程序的平臺(tái)上測(cè)試它。但一般來說,你并不要高級(jí)而昂貴的、配備有邏輯探針、ICE以及其它調(diào)試工具的、針對(duì)目標(biāo)平臺(tái)的開發(fā)環(huán)境。

B)面向?qū)ο蟮木幊?/p>

Java是一種純粹面向?qū)ο蟮恼Z言。所有代碼和數(shù)據(jù)都是某個(gè)類的一部分,沒有全局變量或是獨(dú)立于類存在的代碼,一個(gè)對(duì)象是一個(gè)類的實(shí)例,對(duì)象是通過調(diào)用操作方法,或者說函數(shù)來操作的,而這些方法或函數(shù)也是類的一部分,對(duì)象的方法就對(duì)象的數(shù)據(jù)進(jìn)行操作。Java類被組織成一個(gè)等級(jí)層次,在層次結(jié)構(gòu)中,一個(gè)子類能夠繼承其超類的行為,并可用子類所具備的一些特有功能來擴(kuò)展其超類的功能。對(duì)象模型是你能定義對(duì)應(yīng)真實(shí)事物的數(shù)據(jù)結(jié)構(gòu),使得程序的任務(wù)和任務(wù)如何實(shí)現(xiàn)者二者之間的轉(zhuǎn)換變得基本上透明。

面向?qū)ο蟮脑O(shè)計(jì)和編程的優(yōu)點(diǎn)在于其開發(fā)速度和代碼的可維護(hù)性,許多面向?qū)ο蟮拈_發(fā)都能通過利用和更改現(xiàn)存類庫來完成,而不是創(chuàng)造一個(gè)新的結(jié)構(gòu),這就使開發(fā)加快了,例如,一個(gè)硬件開關(guān)能在軟件中使用一個(gè)開關(guān)對(duì)象來實(shí)現(xiàn),該對(duì)象包含用于控制和操作開關(guān)的所有必需的數(shù)據(jù)和代碼。面向?qū)ο蟮姆椒ㄟ€盡量使用自然的結(jié)構(gòu),使其有很高的可讀性,且可輕易更改和加強(qiáng)。

C)安全和安全操作

由于有了JVM,一個(gè)Java應(yīng)用程序與操作系統(tǒng)或硬件完全隔絕,因此計(jì)算機(jī)病毒或其它作祟的的代碼就很難獲得對(duì)設(shè)備的控制。虛擬機(jī)是主機(jī)設(shè)備和那些可能難以確定其質(zhì)量和可靠性的軟件之間的一個(gè)保護(hù)層。

另外,Java設(shè)計(jì)者從該語言中去掉了指針變量的概念。Java不能任意訪問其內(nèi)存位置,它們只能讀寫有Java內(nèi)存分配管理系統(tǒng)創(chuàng)建的對(duì)象。由于Java編譯器所強(qiáng)制的嚴(yán)格的分類機(jī)制,從理論上來說,訪問那些未分配給程序的內(nèi)存區(qū)域是不可能的。這個(gè)限制使得要寫惡意代碼的程序變得非常困難了。

對(duì)Javaapplet施加的限制就更加嚴(yán)格了。由于Javaapplet被設(shè)計(jì)成從Internet上下載,因而被視為不可信任的代碼,除非它包括你已認(rèn)定為可信任的主機(jī)的數(shù)字指紋。JVM在內(nèi)存的一個(gè)稱之為sandbox的區(qū)域運(yùn)行諸如applet這種不可信任的代碼。它給每個(gè)applet分配資源和特權(quán),并將其限定在這些分配區(qū)域范圍中。

D)內(nèi)存管理

Java的內(nèi)存管理遠(yuǎn)比其他語言簡(jiǎn)單,因?yàn)樗皇褂弥羔?。?dāng)對(duì)象被實(shí)例化時(shí),內(nèi)存被動(dòng)態(tài)分配。正如我們前面分析的,對(duì)個(gè)別內(nèi)存地址的訪問被Java的設(shè)計(jì)者視為一個(gè)對(duì)安全的潛在危險(xiǎn),因此,訪問也被禁止。而且,Sun的網(wǎng)絡(luò)模型已假定你也許不知道目標(biāo)處理器,而引用專用內(nèi)存地址變得沒有必要。去掉指針的結(jié)果不僅提高了安全性,還簡(jiǎn)化了編程,錯(cuò)誤也減少了。

在C語言中,可以用值或引用的方式來訪問數(shù)據(jù)。事實(shí)上,出于靈活性和控制考慮,非原始數(shù)據(jù)類型都由引用方式來存取,即通過指針訪問。因此,值和引用的不同變得非常清楚,特別是:因?yàn)槟悴坏貌皇褂貌煌姆?hào)(*和&)來存取數(shù)據(jù)。要用這兩種不同的訪問方式,你必須清楚理解它們是什么以及你為什么應(yīng)該使用這一個(gè),而不使用那一個(gè)。

在Java中,由值和引用來存儲(chǔ)是無縫的,尤其因?yàn)槠浞?hào)都一樣。兩者間唯一不同在于數(shù)據(jù)類型本身:所有原始數(shù)據(jù)類型始終由值的方式存?。凰袑?duì)象,包括字串、數(shù)組以及文件流,始終由引用方式訪問。聲明為原始數(shù)據(jù)變量類型包含該變量的值,聲明為對(duì)象的變量則包含對(duì)該對(duì)象(即該對(duì)象的地址)的一個(gè)引用,而非對(duì)象自身的引用。僅僅聲明一個(gè)對(duì)象變量并不給對(duì)象分配內(nèi)存,你必須用“new”關(guān)鍵字來分配內(nèi)存和創(chuàng)建對(duì)象。

這兩種方法最根本的不同在于:不可能象在C中那樣就Java內(nèi)存地址做指針?biāo)阈g(shù)或其他操作。Java中對(duì)象的地址是相對(duì)的(或虛擬的),它由虛擬機(jī)任意分配,因此你沒有理由還想要指針地址。

E)垃圾收集

垃圾收集自動(dòng)收集內(nèi)存中未引用的內(nèi)存,并將其歸回空閑內(nèi)存鏈表中。JVM使用此功能將不在使用的內(nèi)存還給系統(tǒng)。

當(dāng)Java程序說明并實(shí)例化一個(gè)對(duì)象或數(shù)組時(shí),它僅僅做一個(gè)JVM請(qǐng)求,訪問其下面的系統(tǒng)內(nèi)存(通常是通過主機(jī)操作系統(tǒng))并分配內(nèi)存,Java的垃圾收集系統(tǒng)通過內(nèi)存收集對(duì)象,然后檢查它們的引用鏈。Java的垃圾收集系統(tǒng)的工作方式一般是搜索內(nèi)存中的對(duì)象,然后檢查它們的引用表。它計(jì)算程序中有多少變量當(dāng)前正在引用每個(gè)對(duì)象。若對(duì)象的引用數(shù)目為零,它知道此對(duì)象不再在使用了,它的內(nèi)存可以收回。其結(jié)果就是,不必像你在C語言所作的那樣,要人工來釋放分配的內(nèi)存。在C中,釋放內(nèi)存是一個(gè)必要、耗時(shí)且易出錯(cuò)的細(xì)節(jié)。Java自動(dòng)而精確的處理此過程,去除了C/C++程序中那種常見的錯(cuò)誤致因。

F)網(wǎng)絡(luò)

由于今天的嵌入式系統(tǒng)通常都是網(wǎng)絡(luò)的,采用內(nèi)置網(wǎng)絡(luò)支持的語言節(jié)約了在實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議和通信程序方面耗費(fèi)的大量時(shí)間和努力。在Java中,網(wǎng)絡(luò)類包括TCP/IP流和使用TCP及UDP的數(shù)據(jù)報(bào)程序,用于HTTP和URL服務(wù)的操作方法,以及錯(cuò)誤檢查代碼和恢復(fù)功能。

雖然實(shí)現(xiàn)網(wǎng)絡(luò)也可能用其他語言,比如C語言,但那些語言要求特別的附件軟件包,DLL,或其他必須由操作系統(tǒng),或者第三方銷售提供程序模塊,特別附件通常要求有操作系統(tǒng)或第三方工具的知識(shí),不象Java,有標(biāo)準(zhǔn)的、內(nèi)置的網(wǎng)絡(luò)支持。

Java包括網(wǎng)絡(luò)包出于必要,因?yàn)樵O(shè)計(jì)者不能對(duì)一個(gè)作為基礎(chǔ)的操作系統(tǒng)的網(wǎng)絡(luò)設(shè)施做任何假定,他們必須得包括集成網(wǎng)絡(luò)程序庫,以確保Java程序能在所有平臺(tái)上工作。

G)動(dòng)態(tài)配置

動(dòng)態(tài)配置是指一系統(tǒng)啟動(dòng)時(shí)的用戶制定配置或重新配置。需載入特殊的硬件配置、網(wǎng)絡(luò)參數(shù)或在引導(dǎo)期間支持特定用途的一些實(shí)用程序的系統(tǒng),常常使用動(dòng)態(tài)配置。

Java以動(dòng)態(tài)捆綁來支持動(dòng)態(tài)配置。當(dāng)你組成一個(gè)程序的各個(gè)類文件編譯成字節(jié)碼時(shí),在你的類文件之間,或者對(duì)JVM包的類(如圖形、網(wǎng)絡(luò)以及核心語言支持)引用,還沒有被解決。當(dāng)JVM載入你的程序時(shí),它動(dòng)態(tài)的載入并捆綁(即鏈接)你的程序引用的所有的類。因此,要改變系統(tǒng)配置,你所需要做的一切就是修正相應(yīng)的類文件。下一次系統(tǒng)時(shí),JVM自動(dòng)捆綁新文件到你的程序中,而新的配置將生效執(zhí)行。

H)異常處理

與許多操作系統(tǒng)和程序不同,對(duì)嵌入系統(tǒng)而言,重新啟動(dòng)通常是無法接受的,就像我們都不希望打電話或者看電視時(shí)突然有技術(shù)性的中斷一樣。這意味著實(shí)際上所有嵌入式系統(tǒng)都必須足夠堅(jiān)實(shí)以截取錯(cuò)誤來防止它們使程序或更糟的是使整個(gè)設(shè)備崩潰。

程序錯(cuò)誤的致因很多。相對(duì)來說,很少是因?yàn)槔^承邏輯錯(cuò)誤,而大多數(shù)程序的崩潰是因?yàn)橐馔廨斎?,或者是因?yàn)槌绦虿荒苷{(diào)用系統(tǒng)資源來完成某個(gè)特定操作。

在Java中,由拋出(產(chǎn)生)一個(gè)異常來提示錯(cuò)誤。使用專門為異常處理而設(shè)計(jì)的語句(關(guān)鍵字try、catch、和finally),程序就能將其錯(cuò)誤處理代碼安排到幾個(gè)集中區(qū)域,try程序塊是程序執(zhí)行的正常流程。當(dāng)一個(gè)異常發(fā)生在try塊(包括該嵌套塊中的各層子程序)中,控制就交給了catch塊。不管是否有異常發(fā)生,finally塊中的代碼始終要被執(zhí)行。未被處理的異常會(huì)由調(diào)用堆棧自下而上傳播JVM并終止程序。你不再需要?jiǎng)邮志幊?,來將錯(cuò)誤狀態(tài)通過幾層函數(shù)調(diào)用返回。而是,在錯(cuò)誤發(fā)生由檢測(cè)錯(cuò)誤的代碼直接拋出一個(gè)異常。這極大地簡(jiǎn)化了應(yīng)用程序中的錯(cuò)誤處理代碼,進(jìn)而獲得更好地錯(cuò)誤處理效果和更堅(jiān)實(shí)可靠的代碼。

I)線程

大多數(shù)操作系統(tǒng)都給一個(gè)過程產(chǎn)生和管理多個(gè)線程的能力,這些線程彼此獨(dú)立地完成不同地任務(wù)。但是,很少由程序語言提供對(duì)線程管理的直線支持,通常都需要直接調(diào)用操作系統(tǒng)功能。Java卻相反,直接在語言提供了產(chǎn)生、管理和協(xié)調(diào)同步線程地功能。與Java的其他特點(diǎn)一樣,該功能是必要的,因?yàn)樵O(shè)計(jì)者不敢確定底層的操作系統(tǒng)是否支持多線程。

開發(fā)者越來越多的在程序中使用線程,將其作為滿足一個(gè)程序不能完成的,通常相互無關(guān)的一些任務(wù)的一種手段。由于Java對(duì)線程有內(nèi)置語言支持,以Java創(chuàng)建多線程較之與其它語言更簡(jiǎn)單、更自然。

J)圖形

JVM包括一個(gè)龐大的圖形及窗口支持程序包,稱為AbstractWindowingToolkit(AWT)。用AWT,你能在應(yīng)用程序中快速而輕易地創(chuàng)建精致而強(qiáng)大的圖形用戶界面。對(duì)于需要精細(xì)的用戶界面的嵌入系統(tǒng)來說,AWT能節(jié)省大量開發(fā)時(shí)間,從而是產(chǎn)品更快的走向市場(chǎng)。

3、Java用于嵌入式系統(tǒng)的局限及解決方案

A)性能

如前所述、解釋Java字節(jié)碼比相當(dāng)?shù)腃或C++寫的程序運(yùn)行起來要慢5到10倍。對(duì)一些并非受制于CPU的嵌入系統(tǒng)來說,這一個(gè)性能缺點(diǎn)不是問題,但是更經(jīng)常的較慢的速度會(huì)導(dǎo)致無法接受的應(yīng)答時(shí)間。有幾種可能的解決方案可緩解速度慢的問題。

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

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

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

B)垃圾收集的系統(tǒng)開銷

前面論述過,Java中的自動(dòng)內(nèi)存分配和垃圾收集性能是實(shí)惠的,因?yàn)樗サ袅俗钔ǔ5某绦蝈e(cuò)誤根源并簡(jiǎn)化了程序設(shè)計(jì)人員的工作。但是,從實(shí)時(shí)系統(tǒng)的角度來看,它的問題恰好就在于它是自動(dòng)的。當(dāng)垃圾收集進(jìn)行時(shí),你的控制就受限了。

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

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

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

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

C)JVM的系統(tǒng)開銷

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

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

D)硬件訪問

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

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

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

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

E)語言尚不夠成熟

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

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

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

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

4、總結(jié)

由上可見,Java的嵌入式應(yīng)用是排在Sun公司日程的最后的,Sun在繼續(xù)為這些用途發(fā)展此語言,但對(duì)這方面的發(fā)展會(huì)次于桌面及企業(yè)用途。但是Java的優(yōu)點(diǎn)已經(jīng)不容忽視,越來越多的廠家和研究工作者正在加緊這方面的突破。希望這篇文章給這方面的探索者些許裨益。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉