Java 時下已經非常流行。全球每天有超過百萬的程序員在用Java進行著程序的開發。用Java編寫的程序也因為其硬件環境無關性而越來越受到人們的青睐。如果您希望成為Java世界的一員,那就看看這個系列的文章也許對您會有幫助。
無論哪種語言都需要有它特定的運行環境也就是平台,Java 同樣不例外。您也許會問,Java程序不是有硬件環境無關性嗎?好吧,我希望這篇文章可以回答好這個問題。
幾乎所有的語言都是需要通過編譯或者解釋才可以被您的電腦執行。可是Java有一點不同,它同時需要這兩個過程。其實,也正是因為這個原因才使Java這種語言具有了平台無關性。當您寫好了一個Java程序的時候(當然這個時候您並不用真的會寫Java程序)。首先,通過一段翻譯程序將它編譯成一種叫做字節碼的中間代碼。然後再由java平台的解釋器將它翻譯成為機器語言來執行----平台的核心叫做JVM(Java虛擬機)。Java的編譯過程也與其它的語言不同。例如像c++這樣的語言,在編譯的時候,是與機器的硬件平台信息密不可分的。編譯程序通過查表將所有指令的操作數和操作碼等等轉換成內存的偏移量即程序運行時的內存分配方式,以保證程序運行。而Java卻是將指令轉換成為一種*.class的文件,這種文件不包含硬件的信息。需要執行的時候只要經過裝了JVM的機器解釋,創立內存布局後再通過查表來確定一條指令所在的地址。這樣就有效的保證了Java的可移植性和安全性。那麼Java平台為什麼會有這麼好的特性呢?
通常一個程序運行的平台是一個硬件或者軟件運行的環境。目前比較流行的是Windows 2000, Linux, Solaris, 和MacOS。Java的平台不太一樣,它由兩個部分組成:一個是Java Virtual Machine即Java虛擬機,另一部分是Java Application Programming Interface (Java API) 即Java應用程序設計接口,這兩部份軟件就構成了Java運行的基本的環境。Java API 是一個大的已經做好的軟件集合,這個集合裡有許多開發時所需要的控件,用來輔助開發。Java API和JVM整合在一起處於機器硬件之上。也就是說,Java平台把一個Java應用程序從硬件系統分離開從而很好的保證了程序的獨立性。為了更好的適應開發的需要,Java的設計者們為我們提供了三種Java平台:Java 2 Micro Edition (J2ME ), Java 2 Standard Edition (J2SE)和 Java 2 Enterprise Edition (J2EE). 每一個版本都提供了豐富的開發工具箱以適應不同的開發需要。
讓我們來具體看看Java平台的核心JVM的具體結構。
為了讓編譯產生的字節碼可以更好的解釋與執行,一共把JVM分成了主要的6塊:JVM解釋器,指令系統,寄存器,棧,存儲區,碎片回收區。
JVM解釋器就是這個虛擬機的處理字段碼的CPU。
JVM指令系統同硬件計算機很相似。一條指令分成操作碼和操作數兩部分組成。操作碼為8位二進制數,操作數可以根據需要而定。操作碼是為了說明一條指令的功能,所以JVM可以有多達256種不同的操作指令。
JVM有自己的虛擬寄存器,這樣就可以快速的和JVM的解釋器進行數據交換。為了功能的需要,JVM設置了常用的4個32位寄存器:pc(程序計數器),optop(操作數棧頂指針),frame(當前執行環境指針),vars(指向當前執行環境中第一個局部變量的指針)。
JVM棧是指令執行的時候數據和信息存儲的場所和控制中心,它提供給JVM解釋器運算所需要的信息。
JVM存儲區就是為了把編譯過後的字節碼等信息存儲起來。
JVM碎片回收是指將那些使用過後的Java類的具體的實例從內存進行回收,這就使得開發人員免去了自己編程控制內存的麻煩和危險。隨著JVM的不斷升級其碎片回收的技術和算法也更加合理。比較經典的算法有引用計數、復制、標記-清除和標記-整理。在JVM1.4.1版以後產生了一種叫分代收集技術,簡單的來說就是利用對象在程序中生存的時間劃分成代,以這個為標准進行碎片回收。關於碎片回收將在以後的文章中專門講解。
最後,通過本文我希望能使大家對Java的運行平台有一個比較清楚的了解。在接下來的文章《 Java學習之踏上旅途的第一步》裡我將告訴大家如何安裝一個Java平台以及如何開始我們的第一個小程序。