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