黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Javase教程下載:Java虛擬機(jī)內(nèi)存區(qū)域模型

Javase教程下載:Java虛擬機(jī)內(nèi)存區(qū)域模型

更新時間:2020-03-04 12:54:49 來源:動力節(jié)點(diǎn) 瀏覽2253次


  Java運(yùn)行時的數(shù)據(jù)區(qū)域,Java虛擬機(jī)在執(zhí)行Java程序的過程中會把它所管理的內(nèi)存劃分成若干個不同的數(shù)據(jù)區(qū)域,這些區(qū)域都有各自的用途,各自的創(chuàng)建和銷毀的時間。有的區(qū)域隨著虛擬機(jī)進(jìn)程的啟動而存在,有些區(qū)域則依賴用戶線程的啟動和結(jié)束而建立和銷毀。


  我們來看一下Java虛擬機(jī)運(yùn)行時的數(shù)據(jù)區(qū)


  Javase教程下載:Java虛擬機(jī)內(nèi)存區(qū)域模型


  結(jié)合這張圖,下面逐個來分析一下每個數(shù)據(jù)區(qū)域的特點(diǎn)。


  1.程序計(jì)數(shù)器


  程序計(jì)數(shù)器是一塊較小的內(nèi)存空間,可以看作是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號指示器。什么意思呢?我們知道,CPU的計(jì)算時間是以分片的方式給到每個線程的(換句話說,所謂并行其實(shí)本質(zhì)上還是串行),比如線程A執(zhí)行到一個地方,CPU將控制權(quán)給了線程B,那么線程A重新獲得CPU的資源時,如何恢復(fù)到剛才執(zhí)行的地方呢?這就是程序計(jì)數(shù)器要干的事了!它能幫助線程A找到剛剛執(zhí)行的地方,從而繼續(xù)剛剛的執(zhí)行。


  為了線程切換后能恢復(fù)到正確的執(zhí)行位置,就要求每個線程都需要有個獨(dú)立的程序計(jì)數(shù)器,各條線程之間的計(jì)數(shù)器互不影響,獨(dú)立存儲。所以程序計(jì)數(shù)器是線程私有的。


  另外,程序計(jì)數(shù)器是唯一一個在Java虛擬機(jī)規(guī)范中沒有規(guī)定任何OutOfMemoryError情況的區(qū)域。


  2.Java虛擬機(jī)棧


  Java虛擬機(jī)棧占有的內(nèi)存空間也就是我們平常所說的“棧內(nèi)存”,并且也是線程私有的,生命周期與線程相同。虛擬機(jī)棧描述的是Java方法執(zhí)行的內(nèi)存模型:每個方法在執(zhí)行的同時,都會創(chuàng)建一個棧幀,用于存儲局部變量表(基本數(shù)據(jù)類型,對象的引用和returnAddress類型)、操作數(shù)棧、動態(tài)鏈接、方法出口等信息。


  局部變量表所需的內(nèi)存空間在編譯期間完成分配,當(dāng)進(jìn)入一個方法時,這個方法需要在棧幀中分配多大的局部變量空間是完全確定的,在方法運(yùn)行期間不會改變局部變量表的大小。


  每個方法被調(diào)用直至執(zhí)行完成的過程,就對應(yīng)著一個棧幀從虛擬機(jī)棧中從入棧到出棧的過程。對于Java虛擬機(jī)棧,有兩種以嘗情況:


  1.如果線程請求的棧深度大于虛擬機(jī)所允許的深度,將拋出StackOverFlowError異常。


  2.如果虛擬機(jī)棧在動態(tài)擴(kuò)展時,無法申請到足夠的內(nèi)存,就會拋出OutOfMemoryError異常。


  3.本地方法棧


  本地方法棧和虛擬機(jī)棧所發(fā)揮的作用非常相似,它們之間的區(qū)別主要是:虛擬機(jī)棧是為虛擬機(jī)執(zhí)行的Java方法(即字節(jié)碼)服務(wù)的,而本地方法棧則為虛擬機(jī)使用到的Native方法服務(wù)。


  與虛擬機(jī)棧類似,本地方法棧也會拋出StackOverFlowError和OutOfMemoryError異常。


  4.Java堆


  Java堆是Java虛擬機(jī)所管理的內(nèi)存中最大的一塊。Java堆在主內(nèi)存中,是被所有線程共享的一塊內(nèi)存區(qū)域,其隨著JVM的創(chuàng)建而創(chuàng)建,堆內(nèi)存的唯一目的是存放對象實(shí)例和數(shù)組。同時Java堆也是GC管理的主要區(qū)域。


  Java堆在物理上不需要連續(xù)的內(nèi)存,只要邏輯上連續(xù)即可。如果堆中沒有內(nèi)存完成實(shí)例分配,并且也無法再擴(kuò)展時,將會拋出OutOfMemoryError異常。


  5.方法區(qū)


  方法區(qū)是所有線程共享的一塊內(nèi)存區(qū)域。用于存儲已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù)據(jù)。方法區(qū)也有一個別名叫Non-heap(非堆),用來與Java堆區(qū)分。對于HotSpot虛擬機(jī)來說,方法區(qū)又習(xí)慣成為“永久代(PermancentGeneration)”,但這只是對于HotSpot虛擬機(jī)來說的,其他虛擬機(jī)的實(shí)現(xiàn)上并沒有這個概念。相對而言,垃圾收集行為在這個區(qū)域比較少出現(xiàn),但也并非不會來收集,這個區(qū)域的內(nèi)存回收目標(biāo)主要是針對常量池的回收和對類型的卸載上。


  根據(jù)Java虛擬機(jī)規(guī)范的規(guī)定,當(dāng)方法區(qū)無法滿足內(nèi)存分配需求時,將拋出OutOfMemoryError異常。


  6.運(yùn)行時常量池


  運(yùn)行時常量池屬于方法區(qū)。Class文件中除了有類的版本、字段、方法、接口等描述信息外,還有一項(xiàng)信息是常量表,用于存放編譯期生成的各種字面常量和符號引用,這部分內(nèi)容將在類加載后進(jìn)入方法區(qū)的運(yùn)行時常量池中存放(JDK1.7開始,常量池已經(jīng)被移到了堆內(nèi)存中了)。


  也就是說,這部分內(nèi)容,在編譯時只是放入到了常量池信息中,到了加載時,才會放到運(yùn)行時常量池中去。運(yùn)行時常量池縣歸于Class文件常量池的另外一個重要特征是具備動態(tài)性,Java語言并不要求常量一定只有編譯期才能產(chǎn)生,也就是并非預(yù)置入Class文件中常量池的內(nèi)容才能進(jìn)入方法區(qū)的運(yùn)行時常量池,運(yùn)行期間也可能將新的常量放入池中,這種特性被開發(fā)人員利用的比較多的是String類的intern()方法。


  當(dāng)方法區(qū)無法滿足內(nèi)存分配需求時,將拋出OutOfMemoryError異常,常量池屬于方法區(qū),同樣可能拋出OutOfMemoryError異常。


  下面針對Java內(nèi)存區(qū)域模型做一下簡單的總結(jié)。


Javase教程下載:Java虛擬機(jī)內(nèi)存區(qū)域模型


      以上就是動力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Javase教程下載:Java虛擬機(jī)內(nèi)存區(qū)域模型”的內(nèi)容,希望對大家有幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時為你服務(wù)。


提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲日本韩国在线 | 日本不卡视频 | 国内精品福利 | 国产成人精品亚洲2020 | 天天摸夜夜添夜夜添国产 | 亚洲第6页| 日本成本人三级在线观看2018 | 日韩欧美一区二区三区在线观看 | 天天噜噜日日噜噜久久综合网 | 成人福利软件免费 | 久久久精品国产免费观看同学 | 色爽爽爽爽爽爽爽爽 | 国产精品九九视频 | 欧美一区二区三区精品 | 激情视频网站 | 精品国语国产在线对白 | 99日韩精品| 欧美成人免费全部观看在线看 | 国产特黄特色a级在线视 | 亚洲综合偷自成人网第页 | 婷婷夜夜躁天天躁人人躁 | 朝鲜free嫩白的18sex性 | 波多野结衣一级视频 | 日本三级网络 | 亚洲欧美在线观看首页 | 久色网址 | 国产男女猛烈无遮档免费视频网站 | ririricc在线观看麻豆 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲伦理一区二区 | 在线人成精品免费视频 | 在线色综合| 欧美综合区自拍亚洲综合 | 国产乱人免费视频 | 一个人看的www免费观看 | 最近中文字幕完整视频高清10 | 日韩a一级欧美一级在线播放 | 免费大黄网站 | 成年人视频在线免费播放 | 亚洲视频一区二区三区 | 国产午夜不卡在线观看视频666 |