Java用于嵌入式系統(tǒng)的優(yōu)點(diǎn)
與個(gè)人計(jì)算機(jī)這樣的通用計(jì)算機(jī)系統(tǒng)不同,嵌入式系統(tǒng)通常執(zhí)行的是帶有特定要求的預(yù)先定義的任務(wù)。yjbys小編下面為你整理了關(guān)于Java用于嵌入式系統(tǒng)的優(yōu)點(diǎn),希望對(duì)你有所幫助。
優(yōu)點(diǎn)1:與處理器無(wú)關(guān)
Java的第一個(gè)優(yōu)點(diǎn)就是與處理器無(wú)關(guān)。傳統(tǒng)上,嵌入程序就是針對(duì)特定的微處理器設(shè)計(jì)并在其上運(yùn)行的,而C語(yǔ)言程序的可移植性則可通過(guò)編譯或交叉編譯來(lái)保障。但是利用Java,一個(gè)程序可以存儲(chǔ)在一個(gè)系統(tǒng)上,而被下載并運(yùn)行在完全不同的另一個(gè)系統(tǒng)上;設(shè)備可能從不同地方下載一些程序在一個(gè)處理器上運(yùn)行,或者不同的處理器運(yùn)行同一個(gè)程序,并通過(guò)網(wǎng)絡(luò)在相互間傳遞數(shù)據(jù)。使用Java,一個(gè)嵌入式系統(tǒng)就可能成為一個(gè)通用的通信設(shè)備,能下載并運(yùn)行能完成特定任務(wù)的程序。
對(duì)嵌入式系統(tǒng)而言,這是一個(gè)新的模型,已經(jīng)有一些開發(fā)者正在向它靠攏。例如,電視機(jī)頂盒的供應(yīng)商已宣布要在機(jī)頂盒內(nèi)植入 JVM,以使用戶能通過(guò)Java applets在他們觀看電視的同時(shí)接收到該電視節(jié)目的一些內(nèi)容。例如在觀看足球比賽時(shí),看到的支持內(nèi)容就可以是對(duì)球員的技術(shù)統(tǒng)計(jì),在看電影時(shí),看到的支持內(nèi)容就可以是演員的背景資料。
這是一個(gè)恰當(dāng)?shù)脑O(shè)計(jì)和實(shí)施模型,首先它可以使開發(fā)平臺(tái)的選擇更加靈活,無(wú)需在與目標(biāo)相同的平臺(tái)上開發(fā),也不用關(guān)心交叉編譯的問(wèn)題,因?yàn)镴ava字節(jié)碼能在任何有JVM的操作系統(tǒng)中運(yùn)行。其次,這種模型帶來(lái)的另一個(gè)優(yōu)點(diǎn)是幾乎所有的檢測(cè)和調(diào)試可以獨(dú)立于目標(biāo)設(shè)備來(lái)進(jìn)行。雖然由于個(gè)別JVM有時(shí)有兼容性的問(wèn)題,應(yīng)該在所有將用到該程序的平臺(tái)上測(cè)試它。但一般來(lái)說(shuō),并不要高級(jí)而昂貴的、配備有邏輯探針、 ICE以及其他調(diào)試工具的、針對(duì)目標(biāo)平臺(tái)的開發(fā)環(huán)境。
優(yōu)點(diǎn)2:提高開發(fā)速度和可維護(hù)性
Java是一種純粹面向?qū)ο蟮恼Z(yǔ)言。Java類被組織成一個(gè)等級(jí)層次,在層次結(jié)構(gòu)中,一個(gè)子類能夠繼承其超類的行為,并可用子類所具備的一些特有功能來(lái)擴(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ā)都能通過(guò)利用和更改現(xiàn)存類庫(kù)來(lái)完成,而不是創(chuàng)造一個(gè)新的結(jié)構(gòu)。這就使開發(fā)加快了, Sun‘s Java Workshop(一個(gè)完全用Java寫的IDE)的開發(fā)者能在幾個(gè)月內(nèi)建立一個(gè)功能齊備的圖形IDE就是一個(gè)很好的證據(jù)。面向?qū)ο蟮姆椒ㄟ盡量使用自然的結(jié)構(gòu),使其有很高的可讀性,并且可輕易更改和加強(qiáng)。
優(yōu)點(diǎn)3:安全性高
由于有了JVM,一個(gè)Java應(yīng)用程序與操作系統(tǒng)或硬件完全隔絕,因此計(jì)算機(jī)病毒或其他作祟的代碼就很難獲得對(duì)設(shè)備的控制。虛擬機(jī)是主機(jī)設(shè)備和那些可能難以確定其質(zhì)量和可靠性的軟件之間的一個(gè)保護(hù)層。
另外,Java設(shè)計(jì)者從該語(yǔ)言中去掉了指針變量的概念。Java不能任意訪問(wèn)內(nèi)存,只能讀寫有Java內(nèi)存分配管理系統(tǒng)創(chuàng)建的對(duì)象。由于Java編譯器所強(qiáng)制的嚴(yán)格的分類機(jī)制,從理論上來(lái)說(shuō),訪問(wèn)那些未分配給程序的內(nèi)存區(qū)域是不可能的。這個(gè)限制使得寫惡意代碼變得非常困難了。當(dāng)然,這個(gè)保護(hù)并不完善,有人已經(jīng)在Java安全模型中找到漏洞,但是,JVM確實(shí)提供了一定的保護(hù),使得幾乎不可能直接在硬件上運(yùn)行代碼。
對(duì)Java applet施加的限制就更加嚴(yán)格了。由于Java applet被設(shè)計(jì)成從Internet上下載,因而被視為不可信任的代碼,除非它包括用戶已認(rèn)定為可信任的主機(jī)的數(shù)字指紋。JVM在內(nèi)存的一個(gè)稱之為 sandbox的區(qū)域運(yùn)行諸如applet這種不可信任的代碼。它給每個(gè)applet分配資源和特權(quán),并將其限定在這些分配區(qū)域范圍中。除了這些限制, sandbox模型還施加如下限制: 禁止讀寫當(dāng)?shù)赜?jì)算機(jī)文件系統(tǒng);網(wǎng)絡(luò)操作被限止,禁止不被信任的代碼建立與任何計(jì)算機(jī)的網(wǎng)絡(luò)連接,它也不能在任何小于1024的端口號(hào)上監(jiān)聽和接受連接;在運(yùn)行不被信任代碼的線程組以外,禁止訪問(wèn)或創(chuàng)建線程。
優(yōu)點(diǎn)4:內(nèi)存管理簡(jiǎn)單
Java的內(nèi)存管理遠(yuǎn)比其他語(yǔ)言簡(jiǎn)單,因?yàn)樗皇褂弥羔。?dāng)對(duì)象被實(shí)例化時(shí),內(nèi)存被動(dòng)態(tài)分配。正如我們前面分析的,對(duì)個(gè)別內(nèi)存地址的訪問(wèn)被Java的設(shè)計(jì)者視為一個(gè)對(duì)安全的潛在危險(xiǎn),因此,訪問(wèn)也被禁止。去掉指針的結(jié)果不僅提高了安全性,還簡(jiǎn)化了編程,錯(cuò)誤也減少了。
為了理解Java怎樣分配內(nèi)存,我們拿Java與C語(yǔ)言比較一下。在C語(yǔ)言中,可以用值或引用的方式來(lái)訪問(wèn)數(shù)據(jù)。事實(shí)上,出于靈活性和控制考慮,非原始數(shù)據(jù)類型都由引用方式來(lái)存取,即通過(guò)指針訪問(wèn)。因此,值和引用的不同變得非常清楚,特別是開發(fā)者不得不使用不同的符號(hào)(*和&)來(lái)存取數(shù)據(jù)。要用這兩種不同的訪問(wèn)方式,必須清楚理解它們是什么以及為什么應(yīng)該使用這一個(gè),而不使用那一個(gè)。
在Java中,由值和引用來(lái)存儲(chǔ)是無(wú)縫的,尤其因?yàn)槠浞?hào)都一樣。兩者間惟一不同在于數(shù)據(jù)類型本身:所有原始數(shù)據(jù)類型始終由值的方式存取;所有對(duì)象,包括字串、數(shù)組以及文件流,始終由引用方式訪問(wèn)。聲明為原始數(shù)據(jù)變量類型包含該變量的值,聲明為對(duì)象的變量則包含對(duì)該對(duì)象(即該對(duì)象的地址)的一個(gè)引用,而非對(duì)象自身的引用。僅僅聲明一個(gè)對(duì)象變量并不給對(duì)象分配內(nèi)存,必須用“new”關(guān)鍵字來(lái)分配內(nèi)存和創(chuàng)建對(duì)象。
這兩種方法最根本的不同在于:不可能像在C中那樣就Java內(nèi)存地址做指針?biāo)阈g(shù)或其他操作。Java中對(duì)象的地址是相對(duì)的(或虛擬的),它由虛擬機(jī)任意分配,因此你沒(méi)有理由還想要指針地址。
優(yōu)點(diǎn)5:具有垃圾收集功能
垃圾收集功能自動(dòng)收集內(nèi)存中未引用的內(nèi)存,并將其歸回空閑內(nèi)存鏈表中。JVM使用此功能將不在使用的內(nèi)存還給系統(tǒng)。當(dāng)Java程序說(shuō)明并實(shí)例化一個(gè)對(duì)象或數(shù)組時(shí),它僅僅做一個(gè)JVM請(qǐng)求,訪問(wèn)其下面的系統(tǒng)內(nèi)存(通常是通過(guò)主機(jī)操作系統(tǒng))并分配內(nèi)存,Java的垃圾收集系統(tǒng)通過(guò)內(nèi)存收集對(duì)象,然后檢查它們的引用鏈。Java的垃圾收集系統(tǒng)的工作方式一般是搜索內(nèi)存中的對(duì)象,然后檢查它們的引用表。它計(jì)算程序中有多少變量當(dāng)前正在引用每個(gè)對(duì)象。若對(duì)象的引用數(shù)目為零,它知道此對(duì)象不再在使用了,它的內(nèi)存可以收回。其結(jié)果就是,不必像C語(yǔ)言那樣,要人工來(lái)釋放分配的內(nèi)存。在C語(yǔ)言中,釋放內(nèi)存是一個(gè)必要、耗時(shí)且易出錯(cuò)的細(xì)節(jié)。Java自動(dòng)而精確的處理此過(guò)程,去除了C/C++程序中那種常見的錯(cuò)誤致因。
優(yōu)點(diǎn)6:網(wǎng)絡(luò)實(shí)現(xiàn)方便
由于今天的嵌入式系統(tǒng)通常都是面向網(wǎng)絡(luò)的,采用內(nèi)置網(wǎng)絡(luò)支持的語(yǔ)言節(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ò)也可能用其他語(yǔ)言,比如C語(yǔ)言,但那些語(yǔ)言要求特別的附件軟件包、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ò)程序庫(kù),以確保Java程序能在所有平臺(tái)上工作。
優(yōu)點(diǎn)7:可以實(shí)現(xiàn)動(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)捆綁來(lái)支持動(dòng)態(tài)配置。當(dāng)組成一個(gè)程序的各個(gè)類文件編譯成字節(jié)碼時(shí),在類文件之間,或者對(duì)JVM包的類(如圖形、網(wǎng)絡(luò)以及核心語(yǔ)言支持)引用,還沒(méi)有被解決。當(dāng)JVM載入程序啟動(dòng)時(shí),它動(dòng)態(tài)的載入并捆綁(即鏈接)程序引用的所有的類。因此,要改變系統(tǒng)配置,需要做的就是修正相應(yīng)的類文件。下一次啟動(dòng)時(shí),JVM自動(dòng)捆綁新文件到你的程序中,而新的配置將生效執(zhí)行。
優(yōu)點(diǎn)8:可以輕松誘捕和處理錯(cuò)誤
與許多操作系統(tǒng)和程序不同,對(duì)嵌入系統(tǒng)而言,重新啟動(dòng)通常是無(wú)法接受的。這意味著嵌入式系統(tǒng)都必須足夠堅(jiān)實(shí),能夠以截取錯(cuò)誤來(lái)防止程序或整個(gè)設(shè)備崩潰。
程序錯(cuò)誤的致因很多。相對(duì)來(lái)說(shuō),很少是因?yàn)槔^承邏輯錯(cuò)誤,而大多數(shù)程序的崩潰是因?yàn)橐馔廨斎,或者是因(yàn)槌绦虿荒苷{(diào)用系統(tǒng)資源來(lái)完成某個(gè)特定操作造成的。所以,必須能夠預(yù)料這些問(wèn)題,并要能夠誘捕它們,以免引起更大的問(wèn)題。雖然,能用幾乎任何程序設(shè)計(jì)語(yǔ)言來(lái)誘捕和處理錯(cuò)誤,不過(guò)如果有內(nèi)置的設(shè)施來(lái)做這類工作,比如像Java那樣,會(huì)有極大的幫助。
在Java中,由拋出(產(chǎn)生)一個(gè)異常來(lái)提示錯(cuò)誤。使用專門為異常處理而設(shè)計(jì)的語(yǔ)句(關(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)邮志幊虂?lái)將錯(cuò)誤狀態(tài)通過(guò)幾層函數(shù)調(diào)用返回。而是,在錯(cuò)誤發(fā)生由檢測(cè)錯(cuò)誤的代碼直接拋出一個(gè)異常。這極大地簡(jiǎn)化了應(yīng)用程序中的錯(cuò)誤處理代碼,進(jìn)而獲得更好地錯(cuò)誤處理效果和更堅(jiān)實(shí)可靠的代碼。
優(yōu)點(diǎn)9:提供對(duì)線程管理的直線支持
大多數(shù)操作系統(tǒng)都給一個(gè)進(jìn)程產(chǎn)生和管理多個(gè)線程的能力,這些線程彼此獨(dú)立地完成不同的任務(wù)。但是,很少由程序語(yǔ)言提供對(duì)線程管理的直線支持,通常都需要直接調(diào)用操作系統(tǒng)功能。Java卻相反,直接在語(yǔ)言中提供了產(chǎn)生、管理和協(xié)調(diào)同步線程的功能。與Java的其他特點(diǎn)一樣,該功能是必要的,因?yàn)樵O(shè)計(jì)者不敢確定底層的操作系統(tǒng)是否支持多線程。
開發(fā)者越來(lái)越多地在程序中使用線程,將其作為滿足一個(gè)程序不能完成的,通常相互無(wú)關(guān)的一些任務(wù)的一種手段。由于Java對(duì)線程有內(nèi)置語(yǔ)言支持,以Java創(chuàng)建多線程較之與其他語(yǔ)言更簡(jiǎn)單、更自然。
優(yōu)點(diǎn)10:圖形功能強(qiáng)大
JVM包括一個(gè)龐大的圖形及窗口支持程序包,稱為Abstract Windowing Toolkit(AWT)。用AWT,能在應(yīng)用程序中快速而輕易地創(chuàng)建精致而強(qiáng)大的圖形用戶界面。對(duì)于需要精細(xì)的用戶界面的嵌入系統(tǒng)來(lái)說(shuō),AWT能節(jié)省大量開發(fā)時(shí)間,從而使產(chǎn)品更快地走向市場(chǎng)。
【Java用于嵌入式系統(tǒng)的優(yōu)點(diǎn)】相關(guān)文章:
Java用于嵌入式系統(tǒng)的局限12-24
關(guān)于Java的優(yōu)點(diǎn)01-02
Java語(yǔ)言架構(gòu)的優(yōu)點(diǎn)07-12
集團(tuán)oa辦公系統(tǒng)的優(yōu)點(diǎn)06-07
嵌入式系統(tǒng)的名詞07-03
嵌入式系統(tǒng)的分類01-04
嵌入式系統(tǒng)組成12-18
嵌入式系統(tǒng)特點(diǎn)12-18