更新時間:2020-10-22 17:14:00 來源:動力節(jié)點(diǎn) 瀏覽1384次
說到j(luò)ava,大家都知道這是一種十分流行且應(yīng)用廣泛的計算機(jī)語言,接觸過java語言的人大多也都知道面向?qū)ο笮?、線程安全性和跨平臺性等都是它的特點(diǎn)。那么是什么使java語言具備了這些優(yōu)秀的特性呢,JVM就是實(shí)現(xiàn)了眾多特性中一個的工具,這篇文章帶大家學(xué)習(xí)JVM是什么,希望java初學(xué)者可以通過下面的內(nèi)容對JVM有一個總體的認(rèn)識和了解。
JVM是什么,就是java虛擬機(jī),是英文Java Virtual Machine的縮寫,是由軟件技術(shù)模擬出計算機(jī)運(yùn)行的一個虛擬的計算機(jī) ,同時JVM是構(gòu)成java技術(shù)的重要一部分,先來看看java技術(shù)的結(jié)構(gòu)圖:
運(yùn)行期環(huán)境代表著Java平臺,開發(fā)人員編寫Java代碼(.java文件),然后將之編譯成字節(jié)碼(.class文件),JVM才能識別并運(yùn)行它,JVM針對每個操作系統(tǒng)開發(fā)其對應(yīng)的解釋器,所以只要其操作系統(tǒng)有對應(yīng)版本的JVM,那么這份Java編譯后的代碼就能夠運(yùn)行起來,這就是Java能一次編譯,到處運(yùn)行的原因。
要全面的理解JVM是什么,要知道如下的內(nèi)容:
1、JVM堆
Java堆是和Java應(yīng)用程序最密切的內(nèi)存空間,幾乎所有的對象都放到堆中。并且堆完全由JVM管理,通過垃圾回收機(jī)制,垃圾對象會被自動清理,而不需顯式的釋放。根據(jù)垃圾回收機(jī)制的不同,Java堆通常被分為以下的集中不同的結(jié)構(gòu):New Generation:由 Eden + Survivor (From Space + To Space)組成;Eden:所有的new出來的新對象都存放到Eden區(qū);Survivor Space:Eden每次垃圾清理過后,任然沒又被清理的對象,會轉(zhuǎn)移到交換區(qū)中;Old Generation:在交換區(qū)中未被清理的對象(默認(rèn)清理18次標(biāo)記),將轉(zhuǎn)移到老年代。
2、JVM棧
Java棧是一塊線程私有的內(nèi)存空間,Java棧和線程執(zhí)行密切相關(guān)。線程的執(zhí)行基本單位就是函數(shù)調(diào)用,每次函數(shù)調(diào)用的數(shù)據(jù)就會通過Java棧傳遞。Java棧與數(shù)據(jù)結(jié)構(gòu)上的棧有著類似的含義,它是一塊先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),只支持出棧和入棧的兩種操作。在Java棧中保存的主要內(nèi)容為棧幀。每次調(diào)用一個函數(shù),都會有一個對應(yīng)的棧幀被壓入Java棧。每一個函數(shù)調(diào)用結(jié)束,都會有一個棧幀被彈出Java棧。例如:
如圖所示,每次調(diào)用一個函數(shù)都會被當(dāng)做棧幀壓入到棧中。其中每一個棧幀對應(yīng)一個函數(shù)。由于每次調(diào)用函數(shù)都會生成一個棧幀,從而占用一定的??臻g。如果線程中存在大量的遞歸操作,會頻繁的壓棧,導(dǎo)致棧的深入過于深入,當(dāng)棧的空間被消耗殆盡的時候,會拋出StackOverflowError棧溢出錯誤。
3、JVM方法區(qū)
它主要存放一些虛擬機(jī)加載的類信息,常量,靜態(tài)變量,即使編譯器后的代碼等數(shù)據(jù)。根據(jù)Java虛擬機(jī)規(guī)范的規(guī)定,當(dāng)方法區(qū)無法滿足內(nèi)存分配需求時,將拋出OutOfMemoryError異常。運(yùn)行時常量池:運(yùn)行時常量區(qū)是方法區(qū)的一部分。用于存放編譯期生成的各種字面量和符號引用,這部分內(nèi)容將在類加載后進(jìn)入方法區(qū)的運(yùn)行時常量池中存放。還會有一些符號引用轉(zhuǎn)換的直接引用一保存在運(yùn)行時常量池中。運(yùn)行時常量池具備動態(tài)性,也就是運(yùn)行期間也可以將新的常量放入池中,例如String.intern()方法。當(dāng)常量池?zé)o法再申請到內(nèi)存時,會拋出OutOfMemoryError異常。
關(guān)于JVM是什么的問題,一句話總結(jié)下來就是:Java虛擬機(jī)是一種跨平臺的軟件,是一種新的網(wǎng)絡(luò)計算平臺。該平臺包括許多相關(guān)的技術(shù),使得同一種應(yīng)用可以運(yùn)行在不同的平臺上。使用Java虛擬機(jī)是實(shí)現(xiàn)java語言與平臺無關(guān)性的關(guān)鍵,所以在學(xué)習(xí)了JVM是什么后,要通過java教程來學(xué)習(xí)更多的JVM其他知識。
初級 202925
初級 203221
初級 202629
初級 203743