查看單個文章
舊 2005-08-20, 10:38 PM   #1 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 JVM(Java虛擬機)簡介

JVM(Java虛擬機)簡介

Java的平台無關性是Java最重要的特性,而實現這一特性的基礎就是Java虛擬機。因此,瞭解Java虛擬機的結構和工作方式對進一步理解Java概念十分有益。

下面我們將從兩個方面介紹Java虛擬機。

什麼是Java虛擬機

從底層看,Java虛擬機就是以Java字元碼為指令組的軟CPU。附圖顯示了Java系統流程圖(內含Java虛擬機)。從附圖可以看出,在伺服器端首先由開發人員編寫Java程序並存為. Java文件;其次,Java編譯器將.java文件編譯成由字元碼組成的.class文件;最後,將.class文件存放在Web伺服器上。



到此,Java程序已作為Internet或Intranet資源存放在Web伺服器上隨時可讓客戶使用。

在客戶端,用戶使用WWW瀏覽器,通過Internet/Intranet將Web伺服器上的含有Java程序的主頁下載,再依賴本機Java虛擬機對.class文件解釋執行。


這樣,內容豐富的Java套用資源便由伺服器傳送到客戶端,並在用戶瀏覽器上顯示出來。

和普通的程序裝入器一樣,Java虛擬機執行程序時首先從網路或本機儲存於器中裝入.class文件。


由於網路的不安全因素較多,Hacker的惡意攻擊,網路病毒的侵襲等等,因此,Java虛擬機在執行.class文件前,首先要對其進行驗證。

如果沒有通過驗證,則不執行並指出錯誤訊息,相反,如果程序成功地經過驗證階段,Java虛擬機將執行翻譯器讀取字元碼,把字元碼轉換成操作系統硬體相關的指令,並在真正的CPU上執行。

字元碼是Java虛擬機的指令組(很像CPU上的微碼)。字元碼形式為<操作碼><...操作數>。

其中,操作碼就是指令碼,佔一個字元的長度,一個字元碼可以有多少操作數。目前,Java虛擬機規範中定度了220個字元碼指令。


由於字元碼指令數目種類繁多,相對於機器碼語義層次較高,因此,Java語言編譯成字元碼後文件尺寸較小便於網路傳輸。



為了執行Java字元碼,硬體廠商或操作系統廠商在自己的硬體和操作系統組合中實現Java虛擬機。Java虛擬機程序模組通常用C、C++或相應CPU支持的彙編語言編寫。


Java虛擬機用主機操作系統說明 完成記憶體、文件系統、顯示器、滑鼠、鍵盤、網路和其它設備驅動器以及執行緒處理等。


另外,各廠商開發自己系統的Java虛擬機需要獲得Java許可證。標準的Javasoft許可包括Java類庫和Java虛擬機。


每個拿到許可證的公司都會在自己的平台上成為Java的監護人,他們可以最佳化系統效能,但必須保證獨立於平台的純Java小程序能在他們的系統上執行。

從概念上講,Java虛擬機的基本執行單元是.class文件。

一個Java程序經過編譯後將形成多個.class文件,而每個文件都對應一個程序中定義的類。


因此,帶有多個.class文件的Java程序在執行時與傳統程序相比就有其特殊性。傳統的程序在執行前,系統要裝入含有全部程序碼的單一執行文件,而Java虛擬機在執行程序時則不同,它遵循"即用即裝入"的原則。


具體講,由於一個.class文件可以引用許多其它.class文件(在Java語言中,通過import,implement或extends語句實現),當執行的類需要其他類時,Java虛擬機即從網路或本機文件系統裝入.class文件。


將這個概念拓廣,不同類可以由不同開發者在不同伺服器上開發,Java虛擬機能夠動態地裝入和連線所需要的類文件。



這對今後軟體開發以及分佈式計算都將有深遠的意義。

例如:這種結構可以使在伺服器向客戶端機提供軟體新版本時,只更新相應的.class文件,真正實現零管理客戶端機以及無版本軟體等。

另外,Java虛擬機是使.class文件具有跨平台能力的核心結構,同一.class文件可以執行在實現Java虛擬機的不同電腦上。


虛擬機只需要知道.class文件應該是什麼結構和應當包含什麼,而不必管.class文件對應的源程序程式碼是由何種語言編寫的。

由於各種語言的編譯器與Java虛擬機本身無關,因此只要不同語言的編譯器能從這些源文件中產生Java字元碼,開發人員就可以使用各人所熟悉的Ada,C或C++語言編寫的執行在任何Java虛擬機上的應用程式,而不必一定要學習Java語言。實現以上所說的內容,將大大簡化現有軟體向平台無關軟體轉化的工作。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次