當前位置:才華齋>計算機>java語言>

Java適用於嵌入式系統有什麼優點

java語言 閱讀(2.5W)

Java是有sun公司於1995年5月推出的Java程式設計語言和Java平臺的總稱。Java平臺由java虛擬機器和java應用程式設計介面構成。下面是小編收集整理的關於Java適用於嵌入式系統的十大優點內容,歡迎閱讀!

Java適用於嵌入式系統有什麼優點

  1.與處理器無關

Java的第一個優點就是與處理器無關,這個優點似乎與嵌入式系統沒什麼相干。傳統上,嵌入程式就是針對特定的微處理器設計並在其上執行的,而C語言程式的可移植性則可通過編譯或交叉編譯來保障。

但是在Sun公司的模型中,一個程式可能是儲存在一個系統上,而被下載並執行在另一個完全不同的系統上;裝置可能從不同地方下載一些程式來在一個處理器上執行,或者不同的處理器執行一個程式,通過網路在相互間傳遞資料。使用Java,一個嵌入式系統就可能成為一個通用的通訊裝置,能下載並執行能完成特定任務的程式。

對嵌入式系統,這是一個新的模型,已經有一些開發者正在向它靠攏。例如,電視機頂盒的供應商已宣佈併入JVM,以使使用者能通過Java applets在他們觀看電視的同時接收到的支援該電視節目的一些內容。這樣你在觀看足球比賽時,看到的支援內容就可以是對球員的技術統計,若你在看電影,看到的支援內容就可以是演員的背景資料。JVM還被移植到行動電話中,這樣使用者可接收股票報價資訊、比賽分數及其他即時資訊。

這是一個恰當的設計和實施模型,首先它可以使開發平臺的選擇更加靈活,無需在與目標相同的平臺上開發,也不用關心交叉編譯的問題,因為Java位元組碼能在任何有JVM的作業系統中執行。其次,這種模型帶來的另一個優點是幾乎所有的檢測和除錯可以獨立於目標裝置來進行。但是,一些資料輸入和硬體互動要求在目標(或是很好的模擬系統)上測試。由於個別JVM有時有相容性的問題,你應該在所有將用到該程式的平臺上測試它。但一般來說,你並不要高階而昂貴的、配備有邏輯探針、ICE以及其它除錯工具的、針對目標平臺的開發環境

  2.面向物件提高開發速度和可維護性

Java是一種純粹面向物件的語言。所有程式碼和資料都是某個類的一部分,沒有全域性變數或是獨立於類存在的程式碼,一個物件是一個類的例項,物件是通過呼叫操作方法,或者說函式來操作的,而這些方法或函式也是類的一部分,物件的方法就物件的資料進行操作。Java類被組織成一個等級層次,在層次結構中,一個子類能夠繼承其超類的行為,並可用子類所具備的一些特有功能來擴充套件其超類的功能。物件模型是你能定義對應真實事物的資料結構,使得程式的任務和任務如何實現者二者之間的轉換變得基本上透明。

Java類層次有六個主要的類(共有二十三個類)成為類包(packages)。要應用任何包中的任何物件,你只需要申明那個包。你也擁有類層次中的全繼承性,任何層次深部的物件都可取用層次中較高處定義的所有方法。

面向物件的設計和程式設計的優點在於其開發速度和程式碼的可維護性,許多面向物件的開發都能通過利用和更改現存類庫來完成,而不是創造一個新的結構。這就使開發加快了,Sun’s Java Workshop(一個完全用Java寫的IDE)的開發者能在幾個月內建立一個功能齊備的圖形IDE就是一個很好的證據。面向物件的方法還儘量使用自然的結構,使其有很高的可讀性,且可輕易更改和加強。

  3.安全高

由於有了JVM,一個Java應用程式與作業系統或硬體完全隔絕,因此計算機病毒或其他作祟的程式碼就很難獲得對裝置的控制。虛擬機器是主機裝置和那些可能難以確定其質量和可靠性的軟體之間的一個保護層。

另外,Java設計者從該語言中去掉了指標變數的概念。Java不能任意訪問記憶體,只能讀寫有Java記憶體分配管理系統建立的物件。由於Java編譯器所強制的嚴格的分類機制,從理論上來說,訪問那些未分配給程式的記憶體區域是不可能的。這個限制使得要寫惡意程式碼的程式變得非常困難了。當然,這個保護並不完善,有人已經在Java安全模型中找到漏洞,其中一些被Sun公司處理掉了。一些有天分但肆無忌憚的程式設計人員可能會寫些程式,有意但不直接地更改記憶體的內容,或從主機獲取密碼或其他資訊。但是,JVM確實提供了一定的保護,使得幾乎不可能直接在硬體上執行程式碼。

對Java applet施加的限制就更加嚴格了。由於Java applet被設計成從Internet上下載,因而被視為不可信任的程式碼,除非它包括你已認定為可信任的主機的數字指紋。JVM在記憶體的一個稱之為sandbox的區域執行諸如applet這種不可信任的程式碼。它給每個applet分配資源和特權,並將其限定在這些分配區域範圍中。除了這些限制,sandbox模型還施加如下限制:禁止讀寫當地計算機檔案系統;網路操作被限止,禁止不被信任的程式碼建立與任何計算機的網路連線,從其下載的那臺計算機除外,它也不能在任何小於1024的埠號(為標準網路協議使用那些著名的埠所保留的埠範圍)上監聽和接受連線;在執行不被信任程式碼的執行緒組以外,禁止訪問或建立執行緒。

  4.記憶體管理簡單

Java的記憶體管理遠比其他語言簡單,因為它不使用指標。當物件被例項化時,記憶體被動態分配。正如我們前面分析的,對個別記憶體地址的訪問被Java的設計者視為一個對安全的潛在危險,因此,訪問也被禁止。而且,Sun的網路模型已假定你也許不知道目標處理器,而引用專用記憶體地址變得沒有必要。去掉指標的結果不僅提高了安全性,還簡化了程式設計,錯誤也減少了。

為了理解Java怎樣分配記憶體,我們來與C語言比較一下。在C語言中,可以用值或引用的方式來訪問資料。事實上,出於靈活性和控制考慮,非原始資料型別都由引用方式來存取,即通過指標訪問。因此,值和引用的不同變得非常清楚,特別是:因為你不得不使用不同的符號(*和&)來存取資料。要用這兩種不同的訪問方式,你必須清楚理解它們是什麼以及你為什麼應該使用這一個,而不使用那一個。

在Java中,由值和引用來儲存是無縫的,尤其因為其符號都一樣。兩者間唯一不同在於資料型別本身:所有原始資料型別始終由值的方式存取;所有物件,包括字串、陣列以及檔案流,始終由引用方式訪問。宣告為原始資料變數型別包含該變數的值,宣告為物件的變數則包含對該物件(即該物件的地址)的一個引用,而非物件自身的引用。僅僅宣告一個物件變數並不給物件分配記憶體,你必須用“new”關鍵字來分配記憶體和建立物件。

這兩種方法最根本的不同在於:不可能象在C中那樣就Java記憶體地址做指標算術或其他操作。Java中物件的地址是相對的(或虛擬的),它由虛擬機器任意分配,因此你沒有理由還想要指標地址。

  5.具有垃圾收集功能

垃圾收集自動收集記憶體中未引用的記憶體,並將其歸回空閒記憶體連結串列中。JVM使用此功能將不在使用的記憶體還給系統。當Java程式說明並例項化一個物件或陣列時,它僅僅做一個JVM請求,訪問其下面的系統記憶體(通常是通過主機作業系統)並分配記憶體,Java的垃圾收集系統通過記憶體收集物件,然後檢查它們的引用鏈。Java的垃圾收集系統的工作方式一般是搜尋記憶體中的物件,然後檢查它們的引用表。它計算程式中有多少變數當前正在引用每個物件。若物件的引用數目為零,它知道此物件不再在使用了,它的記憶體可以收回。其結果就是,不必像你在C語言所作的那樣,要人工來釋放分配的記憶體。在C中,釋放記憶體是一個必要、耗時且易出錯的細節。Java自動而精確的處理此過程,去除了C/C++程式中那種常見的錯誤致因。

  6.網路實現方便

由於今天的嵌入式系統通常都是面向網路的,採用內建網路支援的語言節約了在實現網路協議和通訊程式方面耗費的大量時間和努力。在Java中,網路類包括TCP/IP流和使用TCP及UDP的資料報程式,用於HTTP和URL服務的操作方法,以及錯誤檢查程式碼和恢復功能。雖然實現網路也可能用其他語言,比如C語言,但那些語言要求特別的附件軟體包、DLL,或其他必須由作業系統,或者第三方銷售提供的程式模組,特別附件通常要求有作業系統或第三方工具的知識,不像Java,有標準的、內建的網路支援。Java包括網路包出於必要,因為設計者不能對一個作為基礎的作業系統的網路設施做任何假定,他們必須得包括整合網路程式庫,以確保Java程式能在所有平臺上工作。

  7.可以實現動態配置

動態配置是指系統啟動時的.使用者制定配置或重新配置。需載入特殊的硬體配置、網路引數或在引導期間支援特定用途的一些實用程式的系統,常常使用動態配置。Java以動態捆綁來支援動態配置。當你組成一個程式的各個類檔案編譯成位元組碼時,在你的類檔案之間,或者對JVM包的類(如圖形、網路以及核心語言支援)引用,還沒有被解決。當JVM載入你的程式時,它動態的載入並捆綁(即連結)你的程式引用的所有的類。因此,要改變系統配置,你所需要做的一切就是修正相應的類檔案。下一次系統時,JVM自動捆綁新檔案到你的程式中,而新的配置將生效執行。

  8.可以輕鬆誘捕和處理錯誤

與許多作業系統和程式不同,對嵌入系統而言,重新啟動通常是無法接受的,就像我們都不希望打電話或者看電視時突然有技術性的中斷一樣。這意味著實際上所有嵌入式系統都必須足夠堅實以擷取錯誤來防止它們使程式或更糟的是使整個裝置崩潰。

程式錯誤的致因很多。相對來說,很少是因為繼承邏輯錯誤,而大多數程式的崩潰是因為意外輸入,或者是因為程式不能呼叫系統資源來完成某個特定操作造成的。所以,必須能夠預料這些問題,並要能夠誘捕它們,以免引起更大的問題。雖然,能用幾乎任何程式設計語言來誘捕和處理錯誤,不過如果有內建的設施來做這類工作,比如象Java那樣,會有極大的幫助。

在Java中,由丟擲(產生)一個異常來提示錯誤。使用專門為異常處理而設計的語句(關鍵字try、catch、和finally),程式能將其錯誤處理程式碼安排到幾個集中區域,try程式塊是程式執行的正常流程。當一個異常發生在try塊(包括該巢狀塊中的各層子程式)中,控制就交給了catch塊。不管是否有異常發生,finally塊中的程式碼始終要被執行。未被處理的異常會由呼叫堆疊自下而上傳播JVM並終止程式。不再需要動手程式設計,來將錯誤狀態通過幾層函式呼叫返回。而是,在錯誤發生由檢測錯誤的程式碼直接丟擲一個異常。這極大地簡化了應用程式中的錯誤處理程式碼,進而獲得更好地錯誤處理效果和更堅實可靠的程式碼。

  9.提供對執行緒管理的直線支援

大多數作業系統都給一個過程產生和管理多個執行緒的能力,這些執行緒彼此獨立地完成不同的任務。但是,很少由程式語言提供對執行緒管理的直線支援,通常都需要直接呼叫作業系統功能。Java卻相反,直接在語言提供了產生、管理和協調同步執行緒地功能。與Java的其他特點一樣,該功能是必要的,因為設計者不敢確定底層的作業系統是否支援多執行緒。

開發者越來越多的在程式中使用執行緒,將其作為滿足一個程式不能完成的,通常相互無關的一些任務的一種手段。由於Java對執行緒有內建語言支援,以Java建立多執行緒較之與其它語言更簡單、更自然。

  10.圖形功能強大

JVM包括一個龐大的圖形及視窗支援程式包,稱為Abstract Windowing Toolkit(AWT)。用AWT,你能在應用程式中快速而輕易地建立精緻而強大的圖形使用者介面。對於需要精細的使用者介面的嵌入系統來說,AWT能節省大量開發時間,從而是產品更快的走向市場。