JVM(Java虛擬機(jī))概述
可能有很多學(xué)習(xí)Java的朋友還不知道Java的運(yùn)行原理、Java虛擬機(jī)(JVM)是怎么工作的,本文將為你詳細(xì)講解Java虛擬機(jī)(JVM)的概念,JVM是java的核心和基礎(chǔ),在java編譯器和os平臺之間的虛擬處理器。
JVM(Java虛擬機(jī))詳細(xì)講解
在Java中引入了Java虛擬機(jī)的概念,即在機(jī)器和編譯程序之間加入了一層抽象的虛擬的機(jī)器。這臺虛擬的機(jī)器在任何平臺上都提供給編譯程序一個的共同的接口。編譯程序只需要面向虛擬機(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ī)(JVM)是Java語言的基礎(chǔ)。它是Java技術(shù)的重要組成部分。Java虛擬機(jī)(JVM)是一個抽象的計算機(jī),和實(shí)際的計算機(jī)一樣,它具有一個指令集并使用不同的存儲區(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è)計的,因此它必須簡單明了。為了保證這種簡單性,Java去掉了C++中許多復(fù)雜的、冗余的、有二義性的概念,例如操作符重載、多繼承、數(shù)據(jù)類型自動轉(zhuǎn)換等。為了將程序員從復(fù)雜的內(nèi)存管理的負(fù)擔(dān)中解脫出來,同時也是為了減少錯誤,Java使用了自動內(nèi)存垃圾收集機(jī)制,程序員只要在需要的時候申請即可,不需要釋放,而由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媲美,但是其適用于分布式計算環(huán)境的特性卻遠(yuǎn)遠(yuǎn)超過了Smalltalk。
【編輯推薦】
- 深入學(xué)習(xí)JVM內(nèi)存設(shè)置原理和調(diào)優(yōu)
- JVM體系結(jié)構(gòu)目的和原理
- JVM.dll裝載過程與源代碼分析
- 巧解使Eclipse崩潰的JVM terminated問題
- 解決JVM Terminated.ExitCode=-1問題行之有效的方法