本文主要給大家簡(jiǎn)單講講java中劃分JVM內(nèi)存區(qū)域的詳細(xì)方法,相關(guān)專(zhuān)業(yè)術(shù)語(yǔ)大家可以上網(wǎng)查查或者找一些相關(guān)書(shū)籍補(bǔ)充一下,這里就不涉獵了,我們就直奔主題吧,希望java中劃分JVM內(nèi)存區(qū)域的詳細(xì)方法這篇文章可以給大家?guī)?lái)一些實(shí)際幫助。
成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的寧武網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!什么是JVM?JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫(xiě),JVM是一種用于計(jì)算設(shè)備的規(guī)范,它是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī),是通過(guò)在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來(lái)實(shí)現(xiàn)的。Java虛擬機(jī)包括一套字節(jié)碼指令集、一組寄存器、一個(gè)棧、一個(gè)垃圾回收堆和一個(gè)存儲(chǔ)方法域。
JVM屏蔽了與具體操作系統(tǒng)平臺(tái)相關(guān)的信息,使Java程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺(tái)上不加修改地運(yùn)行。JVM在執(zhí)行字節(jié)碼時(shí),實(shí)際上最終還是把字節(jié)碼解釋成具體平臺(tái)上的機(jī)器指令執(zhí)行。
JVM內(nèi)存區(qū)域
JVM在運(yùn)行時(shí)候會(huì)將他管理的內(nèi)存劃分為多個(gè)區(qū)域,每個(gè)區(qū)域都有自己的用途,生命周期。下面我們根據(jù)內(nèi)存分區(qū)圖片逐個(gè)擊破:
程序計(jì)數(shù)器(Program Counter Register)
程序計(jì)數(shù)器所占內(nèi)存小,他的作用可以看做是當(dāng)前線程所執(zhí)行的字節(jié)碼的指示器,通過(guò)改變計(jì)數(shù)器的值來(lái)獲取下一條字節(jié)碼指令。
程序計(jì)數(shù)器在執(zhí)行Native方法的時(shí)候,計(jì)數(shù)器的值為空(undefined)。
程序計(jì)數(shù)器是線程私有的,每個(gè)線程都會(huì)分派一個(gè)。
在線視頻教程分享:java學(xué)習(xí)
虛擬機(jī)棧(VM Stack)
虛擬機(jī)棧為JVM執(zhí)行java方法服務(wù),每個(gè)方法被執(zhí)行的時(shí)候都會(huì)創(chuàng)建一個(gè)棧楨(Stack Frame)用于存儲(chǔ)局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、方法出口等信息。每一個(gè)方法從調(diào)用直至執(zhí)行結(jié)束,就對(duì)應(yīng)著一個(gè)棧幀從虛擬機(jī)棧中入棧到出棧的過(guò)程。
虛擬機(jī)棧的局部變量表內(nèi)存儲(chǔ)了以下數(shù)據(jù):
基本類(lèi)型數(shù)據(jù)(boolean、byte、char、short、int、float、long、double)
對(duì)象引用(reference 類(lèi)型)
returnAddress 類(lèi)型(指向了一條字節(jié)碼指令的地址)
需要注意的是局部變量表所需的內(nèi)存空間在編譯期間就已經(jīng)確定了,大小不再變動(dòng)。
虛擬機(jī)棧也是線程私有的,每個(gè)線程都會(huì)分派一個(gè)。
JVM對(duì)虛擬機(jī)棧規(guī)定了兩種異常:
StackOverflowError:線程請(qǐng)求的棧深度大于虛擬機(jī)所允許的深度。
OutOfMemoryError:如果虛擬機(jī)??梢詣?dòng)態(tài)擴(kuò)展,而擴(kuò)展時(shí)無(wú)法申請(qǐng)到足夠的內(nèi)存。
本地方法棧(Native Method Stack)
本地方法棧與虛擬機(jī)棧類(lèi)似,主要區(qū)別就在于本地方法棧是專(zhuān)門(mén)為Native方法提供服務(wù)。
Native方法:在java中由Native關(guān)鍵字聲明的方法,非java語(yǔ)言實(shí)現(xiàn),是引用本地庫(kù)提供的第三方語(yǔ)言方法。
本地方法棧也是線程私有的,每個(gè)線程都會(huì)分派一個(gè)。
堆(Heap)
堆是所有線程共享的內(nèi)存區(qū)域,在JVM啟動(dòng)時(shí)創(chuàng)建,一般是JVM內(nèi)占用大的一塊,垃圾收集器(GC)管理的主要區(qū)域。
堆中主要存儲(chǔ)的數(shù)據(jù)為:
對(duì)象
數(shù)組
堆可以在物理上不連續(xù),而只要在邏輯上連續(xù)即可,因此是一個(gè)可擴(kuò)展的內(nèi)存區(qū)域。
當(dāng)堆內(nèi)存大小不夠創(chuàng)建對(duì)象或數(shù)組所占用的內(nèi)存大小,并且不能夠再擴(kuò)展時(shí),會(huì)拋出OutOfMemoryError異常。
方法區(qū)(Method Area)
方法區(qū)也是所有線程共享的內(nèi)存區(qū)域。
方法區(qū)主要存儲(chǔ)的數(shù)據(jù)為:
已被JVM加載的類(lèi)信息
常量(從jdk1.7開(kāi)始,運(yùn)行時(shí)常量池移動(dòng)到了堆中)
靜態(tài)變量
即時(shí)編譯器編譯后的代碼等數(shù)據(jù)
垃圾收集器(GC)比較少出現(xiàn)在這個(gè)區(qū)域,主要的內(nèi)存回收目標(biāo)是常量池的回收和對(duì)類(lèi)型的卸載。
當(dāng)方法區(qū)無(wú)法滿足內(nèi)存分配需求時(shí),會(huì)拋出OutOfMemoryError異常。
常量池(Runtime Constant Pool)
常量池屬于方法區(qū)一部分,用于存放編譯期生成的各種字面量和符號(hào)引用。編譯期和運(yùn)行期(String 的 intern() )都可以將常量放入池中。內(nèi)存有限,無(wú)法申請(qǐng)時(shí)拋出 OutOfMemoryError異常。
從jdk1.7開(kāi)始,運(yùn)行時(shí)常量池移動(dòng)到了堆中。
直接內(nèi)存(Direct Memory)
直接內(nèi)存并不是JVM運(yùn)行時(shí)內(nèi)存數(shù)據(jù)區(qū)域,也不是JVM規(guī)范中定義的內(nèi)存。
直接內(nèi)存占用物理內(nèi)存大小,需要注意在分配JVM內(nèi)存的時(shí)候要把直接內(nèi)存也計(jì)算在內(nèi),否則在動(dòng)態(tài)擴(kuò)展內(nèi)存時(shí)可能出現(xiàn)OutOfMemoryError異常。
java中劃分JVM內(nèi)存區(qū)域的詳細(xì)方法就先給大家講到這里,對(duì)于其它相關(guān)問(wèn)題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會(huì)捕捉一些行業(yè)新聞及專(zhuān)業(yè)知識(shí)分享給大家的。
本文標(biāo)題:java中劃分JVM內(nèi)存區(qū)域的詳細(xì)方法-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)地址:http://jinyejixie.com/article18/cshcdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司、響應(yīng)式網(wǎng)站、搜索引擎優(yōu)化、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容