專家答疑 什么是JVM?
可能有很多學(xué)習(xí)Java的朋友還不知道Java的運(yùn)行原理、Java虛擬機(jī)是怎么工作的,本文將為你詳細(xì)講解(JVM)Java 虛擬機(jī)的概念和用法,它是在機(jī)器和編譯程序之間加入了一層抽象的虛擬的機(jī)器。
Java中JVM(Java虛擬機(jī))的詳細(xì)介紹
在Java中引入了Java虛擬機(jī)的概念,即在機(jī)器和編譯程序之間加入了一層抽象的虛擬的機(jī)器。這臺虛擬的機(jī)器在任何平臺上都提供給編譯程序一個(gè)的共同的接口。編譯程序只需要面向虛擬機(jī),生成虛擬機(jī)能夠理解的代碼,然后由解釋器來將虛擬機(jī)代碼轉(zhuǎn)換為特定系統(tǒng)的機(jī)器碼執(zhí)行。在Java中,這種供虛擬機(jī)理解的代碼叫做字節(jié)碼(ByteCode),它不面向任何特定的處理器,只面向虛擬機(jī)。每一種平臺的解釋器是不同的,但是實(shí)現(xiàn)的虛擬機(jī)是相同的。Java源程序經(jīng)過編譯器編譯后變成字節(jié)碼,字節(jié)碼由虛擬機(jī)解釋執(zhí)行,虛擬機(jī)將每一條要執(zhí)行的字節(jié)碼送給解釋器,解釋器將其翻譯成特定機(jī)器上的機(jī)器碼,然后在特定的機(jī)器上運(yùn)行。
可以說,Java虛擬機(jī)是Java語言的基礎(chǔ)。它是Java技術(shù)的重要組成部分。Java虛擬機(jī)是一個(gè)抽象的計(jì)算機(jī),和實(shí)際的計(jì)算機(jī)一樣,它具有一個(gè)指令集并使用不同的存儲區(qū)域。它負(fù)責(zé)執(zhí)行指令,還要管理數(shù)據(jù)、內(nèi)存和寄存器。Java解釋器負(fù)責(zé)將字節(jié)代碼翻譯成特定機(jī)器的機(jī)器代碼。Java是一種簡單的語言。它用到的概念不多,而且多為程序員所熟悉。如果你是一名程序員,掌握J(rèn)ava對你來說是易如反掌的事。即使你沒有學(xué)過任何編程語言,學(xué)習(xí)Java也要比學(xué)習(xí)C++要容易的多。
由于Java最初是為控制電子產(chǎn)品設(shè)計(jì)的,因此它必須簡單明了。為了保證這種簡單性,Java去掉了C++中許多復(fù)雜的、冗余的、有二義性的概念,例如操作符重載、多繼承、數(shù)據(jù)類型自動轉(zhuǎn)換等。為了將程序員從復(fù)雜的內(nèi)存管理的負(fù)擔(dān)中解脫出來,同時(shí)也是為了減少錯(cuò)誤,Java使用了自動內(nèi)存垃圾收集機(jī)制,程序員只要在需要的時(shí)候申請即可,不需要釋放,而由Java自己來收集、釋放內(nèi)存中的無用的塊。
與C++相比,Java有著更強(qiáng)的面向?qū)ο筇匦?,是一種比較純粹的面向?qū)ο笳Z言。一般我們使用的一些所謂的面向?qū)ο蟮木幊陶Z言,如C++,Object Pascal等,實(shí)際上都是一種混合型的語言,即在過程式的語言中加上面向?qū)ο蟮臄U(kuò)展。在Java中,幾乎萬物皆對象,就連一些基本數(shù)據(jù)類型,如整型、字符型、浮點(diǎn)型等,在Java中都可以作為對象處理。Java的面向?qū)ο筇匦詭缀蹩梢耘cSmalltalk媲美,但是其適用于分布式計(jì)算環(huán)境的特性卻遠(yuǎn)遠(yuǎn)超過了Smalltalk。
詳細(xì)出處參考:http://www.114java.com/javajichu/201006/2312.html
【編輯推薦】