Java基礎(chǔ):JVM(Java虛擬機(jī))的詳細(xì)講解

字號(hào):

可能有很多學(xué)習(xí)Java的朋友還不知道Java的運(yùn)行原理、Java虛擬機(jī)是怎么工作的,本文將為你詳細(xì)講解(JVM)Java 虛擬機(jī)。
    在Java中引入了虛擬機(jī)的概念,即在機(jī)器和編譯程序之間加入了一層抽象的虛擬的機(jī)器。這臺(tái)虛擬的機(jī)器在任何平臺(tái)上都提供給編譯程序一個(gè)的共同的接口。編譯程序只需要面向虛擬機(jī),生成虛擬機(jī)能夠理解的代碼,然后由解釋器來(lái)將虛擬機(jī)代碼轉(zhuǎn)換為特定系統(tǒng)的機(jī)器碼執(zhí)行。在Java中,這種供虛擬機(jī)理解的代碼叫做字節(jié)碼(ByteCode),它不面向任何特定的處理器,只面向虛擬機(jī)。每一種平臺(tái)的解釋器是不同的,但是實(shí)現(xiàn)的虛擬機(jī)是相同的。Java源程序經(jīng)過(guò)編譯器編譯后變成字節(jié)碼,字節(jié)碼由虛擬機(jī)解釋執(zhí)行,虛擬機(jī)將每一條要執(zhí)行的字節(jié)碼送給解釋器,解釋器將其翻譯成特定機(jī)器上的機(jī)器碼,然后在特定的機(jī)器上運(yùn)行。
    可以說(shuō),Java虛擬機(jī)是Java語(yǔ)言的基礎(chǔ)。它是Java技術(shù)的重要組成部分。Java虛擬機(jī)是一個(gè)抽象的計(jì)算機(jī),和實(shí)際的計(jì)算機(jī)一樣,它具有一個(gè)指令集并使用不同的存儲(chǔ)區(qū)域。它負(fù)責(zé)執(zhí)行指令,還要管理數(shù)據(jù)、內(nèi)存和寄存器。Java解釋器負(fù)責(zé)將字節(jié)代碼翻譯成特定機(jī)器的機(jī)器代碼。Java是一種簡(jiǎn)單的語(yǔ)言。它用到的概念不多,而且多為程序員所熟悉。如果你是一名程序員,掌握J(rèn)ava對(duì)你來(lái)說(shuō)是易如反掌的事。即使你沒(méi)有學(xué)過(guò)任何編程語(yǔ)言,學(xué)習(xí)Java也要比學(xué)習(xí)C++要容易的多。
    由于Java最初是為控制電子產(chǎn)品設(shè)計(jì)的,因此它必須簡(jiǎn)單明了。為了保證這種簡(jiǎn)單性,Java去掉了C++中許多復(fù)雜的、冗余的、有二義性的概念,例如操作符重載、多繼承、數(shù)據(jù)類型自動(dòng)轉(zhuǎn)換等。為了將程序員從復(fù)雜的內(nèi)存管理的負(fù)擔(dān)中解脫出來(lái),同時(shí)也是為了減少錯(cuò)誤,Java使用了自動(dòng)內(nèi)存垃圾收集機(jī)制,程序員只要在需要的時(shí)候申請(qǐng)即可,不需要釋放,而由Java自己來(lái)收集、釋放內(nèi)存中的無(wú)用的塊。
    與C++相比,Java有著更強(qiáng)的面向?qū)ο筇匦?,是一種比較純粹的面向?qū)ο笳Z(yǔ)言。一般我們使用的一些所謂的面向?qū)ο蟮木幊陶Z(yǔ)言,如C++,Object Pascal等,實(shí)際上都是一種混合型的語(yǔ)言,即在過(guò)程式的語(yǔ)言中加上面向?qū)ο蟮臄U(kuò)展。在Java中,幾乎萬(wàn)物皆對(duì)象,就連一些基本數(shù)據(jù)類型,如整型、字符型、浮點(diǎn)型等,在Java中都可以作為對(duì)象處理。Java的面向?qū)ο筇匦詭缀蹩梢耘cSmalltalk媲美,但是其適用于分布式計(jì)算環(huán)境的特性卻遠(yuǎn)遠(yuǎn)超過(guò)了Smalltalk。
    Java是一種支持分布式操作的程序設(shè)計(jì)語(yǔ)言。使用Java提供的URL類,用戶可以象訪問(wèn)本地文件一樣訪問(wèn)網(wǎng)絡(luò)上的對(duì)象,使用非常方便。在客戶機(jī)/服務(wù)器的模式下,Java還可以將運(yùn)算從服務(wù)器端分散到客戶端,提高系統(tǒng)的效率,避免了服務(wù)器的瓶頸制約。Java的網(wǎng)絡(luò)類庫(kù)支持分布式的編程。Socket類提供可靠的流式網(wǎng)絡(luò)的連接,支持TCP/IP協(xié)議。通過(guò)編寫協(xié)議句柄,程序員還可以擴(kuò)充Java支持的協(xié)議集合。
    Java提供非常有效的安全控制。由于Java應(yīng)用于網(wǎng)絡(luò)程序的開發(fā),因而安全性變的至關(guān)重要。因?yàn)镴ava小程序需要下載到客戶端解釋執(zhí)行,所以,如果沒(méi)有安全控制,就會(huì)給一些網(wǎng)絡(luò)黑客以可乘之機(jī),這對(duì)用戶來(lái)說(shuō)是非常危險(xiǎn)的。所幸的是,Java的安全機(jī)制可以有效的防止病毒程序的產(chǎn)生、下載程序?qū)Ρ镜匚募到y(tǒng)的破壞,以及網(wǎng)絡(luò)黑客竊取密碼和入侵。
    Java是一種非常健壯的語(yǔ)言。因?yàn)樵贘ava中使用了以下手段:
    不支持指針。在C++程序中,指針的錯(cuò)誤使用通常的程序中BUG的元兇。在Java中徹底去掉了指針,杜絕了內(nèi)存的非法訪問(wèn),從而保證了程序的可靠性。