Java語言引入了Java虛擬機,具備跨平臺運行的功能,可以很好地適應各類Web應用。同時,爲了提升Java語言的性能和健壯性,還引入瞭如垃圾回收機制等新功能,經過這些改進讓Java具備其獨特的工做原理。程序員
1.Java虛擬機算法
Java虛擬機(Java Virtual Machine,JVM)是軟件模擬的計算機,它能夠在任何處理器上(不管是在計算機中仍是在其餘電子設備中)安全兼容地執行保存在.cla文件中的字節碼。Java虛擬機的「機器碼」保存在.cla文件中,有時也能夠稱之爲字節碼文件。編程
Java程序的跨平臺特性主要是指字節碼文件能夠在任何具備Java虛擬機的計算機或者電子設備上運行,Java虛擬機中的Java解釋器負責將字節碼文件解釋成爲特定的機器碼進行運行。所以在運行時,Java源程序須要經過編譯器編譯成爲.cla文件。安全
Java虛擬機的創建須要針對不一樣的軟硬件平臺來實現,既要考慮處理器的型號,也要考慮操做系統的種類。由此在ARC結構、X86結構、MI和C等嵌入式處理芯片上,在UNIX、Linux、Windows和部分實時操做系統上均可實現Java虛擬機。網絡
2.無用內存自動回收機制編程語言
在程序的執行過程當中,部份內存在使用事後就處於廢棄狀態,若是不及時進行回收,頗有可能會致使內存泄漏,進而引起系統崩潰。在C++語言中是由程序員進行內存回收的,程序員須要在編寫程序時把再也不使用的對象內存釋放掉,這種人爲管理內存釋放的方法每每因爲程序員的疏忽而導致內存沒法回收,同時也增長了程序員的工做量。而在Java運行環境中,始終存在着一個系統級的線程,專門跟蹤內存的使用狀況,按期檢測出再也不使用的內存,並自動進行回收,避免了內存的泄露,也減輕了程序員的工做量。工具
3.代碼安全性檢查機制性能
安全和方便老是相對矛盾的。Java編程語言的出現使得客戶端計算機能夠方便地從網絡上上傳或下載Java程序到本地計算機上運行,可是如何保證該Java程序不攜帶病毒或者沒有其餘危險目的呢?爲了確保Java程序執行的安全性,Java語言經過Alet程序來控制非法程序的安全性,也就是有了它才確保Java語言的生存。開發工具
Java字節碼的執行須要通過如下3個步驟:spa
(1)由類裝載器(cla loader)負責把類文件(.cla文件)加載到Java虛擬機中。在此過程須要檢驗該類文件是否符合類文件規範。
(2)字節碼校驗器(bytecode verifier)檢查該類文件的代碼中是否存在着某些非法操做,例如Alet程序中寫本地計算機文件系統的操做。
(3)若是字節碼校驗器檢驗經過,由Java解釋器負責把該類文件解釋成爲機器碼進行執行。
注意:
Java虛擬機採用「沙箱」運行模式,即把Java程序的代碼和數據都限制在必定內存空間裏執行,不容許程序訪問該內存空間之外的內存。若是是Alet程序,還不容許訪問客戶端機器的文件系統。
Java的運行環境
不管哪一種語言都須要有它特定的運行環境,也就是平臺。Java語言一樣不例外。可是如何理解Java程序與硬件環境無關呢?
幾乎全部的語言都須要經過編譯或者解釋才能夠被計算機執行,可是Java有一點不一樣,它同時須要這兩個過程。其實,也正是由於這個緣由才使Java這種語言具備了平臺無關性。當完成一個Java源程序後,首先,經過Java翻譯程序將它編譯成一種叫作字節碼的中間代碼,而後再由Java平臺的解釋器將它轉換成爲機器語言來執行,這一平臺的核心就是JVM。
Java的編譯過程與其餘的語言不一樣。像C++這樣的語言,在編譯時它是與計算機的硬件平臺信息密不可分的。編譯程序經過查表將全部指令的操做數和操做碼等轉換成內存的偏移量,即程序運行時的內存分配方式,目的是保證程序正常運行。而Java倒是將指令轉換成爲一種.cla的文件,這種文件不包含硬件的信息,須要執行時只要通過安裝有JVM的機器進行解釋,建立內存分配後再經過查表來肯定一條指令所在的地址。這樣就有效地保證了Java的可移植性和安全性。
Java平臺具備這樣的特性和它的結構有關。一般一個程序運行的平臺是一個硬件或者軟件運行的環境,目前比較流行的是Windows XP、Linux、Solaris和MacOS。Java的平臺不太同樣,它由兩個部分組成,即JVM和應用程序設計接口。
1.JVM
JVM是Java平臺的核心,爲了讓編譯產生的字節碼能更好地解釋與執行,所以把JVM分紅了6個部分:JVM解釋器、指令系統、寄存器、棧、存儲區和碎片回收區
◆JVM解釋器:即這個虛擬機處理字段碼的CPU。
◆JVM指令系統:該系統與計算機很類似,一條指令由操做碼和操做數兩部分組成。操做碼爲8位二進制數,主要是爲了說明一條指令的功能,操做數能夠根據須要而定,JVM有多達256種不一樣的操做指令。
◆寄存器:JVM有本身的虛擬寄存器,這樣就能夠快速地與JVM的解釋器進行數據交換。爲了功能的須要,JVM設置了4個經常使用的32位寄存器:pc(程序計數器)、optop(操做數棧頂指針)、frame(當前執行環境指針)和vars(指向當前執行環境中第一個局部變量的指針)。
◆JVM棧:指令執行時數據和信息存儲的場所和控制中心,它提供給JVM解釋器運算所須要的信息。
◆存儲區:JVM存儲區用於存儲編譯事後的字節碼等信息。
◆碎片回收區:JVM碎片回收是指將使用過的Java類的具體實例從內存進行回收,這就使得開發人員免去了本身編程控制內存的麻煩和危險。隨着JVM的不斷升級,其碎片回收的技術和算法也更加合理。JVM 1.4.1版後產生了一種叫分代收集技術,簡單來講就是利用對象在程序中生存的時間劃分紅代,以此爲標準進行碎片回收。
2.Java應用程序設計接口
Java Alication Programming Interface簡稱Java API,其中文名爲Java應用程序設計接口。它是一個軟件集合,其中有許多開發時所須要的控件,能夠用它來輔助開發。
Java API和JVM構成了Java運行的基本環境,這兩種軟件整合在一塊兒處於計算機之上,經過這兩種軟件,Java平臺把一個Java應用程序從硬件系統分離開,從而很好地保證了程序的獨立性。爲了更好地適應開發的須要,Java的設計者們提供了3種版本的Java平臺:Java 2 Micro Edition (J2ME )、Java 2 Standard Edition(J2SE)和 Java 2 Enterprise Edition (J2EE),每一種版本都提供了豐富的開發工具以適應不一樣的開發須要。