1.2 java的工作原理
1.2.1 java虛擬機(1)
java虛擬機是軟件模擬的計算機,可以在任何處理器上(無論是在計算機中還是在其它電子設備中)安全并且兼容的執(zhí)行保存在.class文件中的字節(jié)碼。java虛擬機的"機器碼"保存在.class文件中,有時也可以稱之為字節(jié)碼文件。java程序的跨平臺主要是指字節(jié)碼文件可以在任何具有java虛擬機的計算機或者電子設備上運行,java虛擬機中的java解釋器負責將字節(jié)碼文件解釋成為特定的機器碼進行運行。java源程序需要通過編譯器編譯成為.class文件(字節(jié)碼文件),java程序的編譯和執(zhí)行過程 ——如圖所示——
1.2.1 java虛擬機(2)
但是,java虛擬機的建立需要針對不同的軟硬件平臺做專門的實現(xiàn),既要考慮處理器的型號,也要考慮操作系統(tǒng)的種類。如下圖所示,目前在SPARC結構、X86結構、MIPS和PPC等嵌入式處理芯片上、在UNIX、Linux、windows和部分實時操作系統(tǒng)上都有java虛擬機的實現(xiàn)。 ——如圖所示——
1.2.2 無用內存自動回收機制
在程序的執(zhí)行過程中,部分內存在使用過后就處于廢棄狀態(tài),如果不及時進行無用內存的回收,就會導致內存泄漏,進而導致系統(tǒng)崩潰。在C++語言中是由程序員進行內存回收的,程序員需要在編寫程序的時候把不再使用的對象內存釋放掉;但是這種人為的管理內存釋放的方法卻往往由于程序員的疏忽而致使內存無法回收,同時也增加了程序員的工作量。而在java運行環(huán)境中,始終存在著一個系統(tǒng)級的線程,專門跟蹤內存的使用情況,定期檢測出不再使用的內存,并進行自動回收,避免了內存的泄露,也減輕了程序員的工作量。
1.2.3 代碼安全性檢查機制
安全和方便總是相對矛盾的。java編程語言的出現(xiàn)使得客戶端機器可以方便的從網(wǎng)絡上下載java程序到本機上運行,但是如何保證該java程序不攜帶病毒或者不懷有其它險惡目的呢?如果java語言不能保證執(zhí)行的安全性,那么它就不可能存活到今天。雖然有時候少數(shù)程序員會抱怨說applet連文件系統(tǒng)也不能訪問,但是正是各種安全措施的實行才確保了java語言的生存
字節(jié)碼的執(zhí)行需要經過三個步驟,首先由類裝載器(class loader)負責把類文件(.class文件)加載到java虛擬機中,在此過程需要檢驗該類文件是否符合類文件規(guī)范;其次字節(jié)碼校驗器(bytecode verifier)檢查該類文件的代碼中是否存在著某些非法操作,例如applet程序中寫本機文件系統(tǒng)的操作;如果字節(jié)碼校驗器檢驗通過,由java解釋器負責把該類文件解釋成為機器碼進行執(zhí)行。java虛擬機采用的是"沙箱"運行模式,即把java程序的代碼和數(shù)據(jù)都限制在一定內存空間里執(zhí)行,不允許程序訪問該內存空間外的內存,如果是applet程序,還不允許訪問客戶端機器的文件系統(tǒng)。
1.2.1 java虛擬機(1)
java虛擬機是軟件模擬的計算機,可以在任何處理器上(無論是在計算機中還是在其它電子設備中)安全并且兼容的執(zhí)行保存在.class文件中的字節(jié)碼。java虛擬機的"機器碼"保存在.class文件中,有時也可以稱之為字節(jié)碼文件。java程序的跨平臺主要是指字節(jié)碼文件可以在任何具有java虛擬機的計算機或者電子設備上運行,java虛擬機中的java解釋器負責將字節(jié)碼文件解釋成為特定的機器碼進行運行。java源程序需要通過編譯器編譯成為.class文件(字節(jié)碼文件),java程序的編譯和執(zhí)行過程 ——如圖所示——
1.2.1 java虛擬機(2)
但是,java虛擬機的建立需要針對不同的軟硬件平臺做專門的實現(xiàn),既要考慮處理器的型號,也要考慮操作系統(tǒng)的種類。如下圖所示,目前在SPARC結構、X86結構、MIPS和PPC等嵌入式處理芯片上、在UNIX、Linux、windows和部分實時操作系統(tǒng)上都有java虛擬機的實現(xiàn)。 ——如圖所示——
1.2.2 無用內存自動回收機制
在程序的執(zhí)行過程中,部分內存在使用過后就處于廢棄狀態(tài),如果不及時進行無用內存的回收,就會導致內存泄漏,進而導致系統(tǒng)崩潰。在C++語言中是由程序員進行內存回收的,程序員需要在編寫程序的時候把不再使用的對象內存釋放掉;但是這種人為的管理內存釋放的方法卻往往由于程序員的疏忽而致使內存無法回收,同時也增加了程序員的工作量。而在java運行環(huán)境中,始終存在著一個系統(tǒng)級的線程,專門跟蹤內存的使用情況,定期檢測出不再使用的內存,并進行自動回收,避免了內存的泄露,也減輕了程序員的工作量。
1.2.3 代碼安全性檢查機制
安全和方便總是相對矛盾的。java編程語言的出現(xiàn)使得客戶端機器可以方便的從網(wǎng)絡上下載java程序到本機上運行,但是如何保證該java程序不攜帶病毒或者不懷有其它險惡目的呢?如果java語言不能保證執(zhí)行的安全性,那么它就不可能存活到今天。雖然有時候少數(shù)程序員會抱怨說applet連文件系統(tǒng)也不能訪問,但是正是各種安全措施的實行才確保了java語言的生存
字節(jié)碼的執(zhí)行需要經過三個步驟,首先由類裝載器(class loader)負責把類文件(.class文件)加載到java虛擬機中,在此過程需要檢驗該類文件是否符合類文件規(guī)范;其次字節(jié)碼校驗器(bytecode verifier)檢查該類文件的代碼中是否存在著某些非法操作,例如applet程序中寫本機文件系統(tǒng)的操作;如果字節(jié)碼校驗器檢驗通過,由java解釋器負責把該類文件解釋成為機器碼進行執(zhí)行。java虛擬機采用的是"沙箱"運行模式,即把java程序的代碼和數(shù)據(jù)都限制在一定內存空間里執(zhí)行,不允許程序訪問該內存空間外的內存,如果是applet程序,還不允許訪問客戶端機器的文件系統(tǒng)。