一区二区三区精品视频-一区二区三区国产美女在线播放-一区二区三区福利视频-一区二区三区福利-毛片大全免费看-毛片大片免费看

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

當(dāng)前位置:首頁(yè)  >  IT問(wèn)答庫(kù)  >  Java基礎(chǔ)知識(shí)

JVM模型的介紹一

發(fā)布:java培訓(xùn) 2022-03-16 09:54

JVM模型的介紹一

推薦答案

  Java培訓(xùn)班教程系列分享JVM模型的介紹Java內(nèi)存分配:JVM定義了若干個(gè)程序執(zhí)行期間使用的數(shù)據(jù)區(qū)域。這個(gè)區(qū)域里的一些數(shù)據(jù)在JVM啟動(dòng)的時(shí)候創(chuàng)建,在JVM退出的時(shí)候銷(xiāo)毀。而其他的數(shù)據(jù)依賴(lài)于每一個(gè)線程,在線程創(chuàng)建時(shí)創(chuàng)建,在線程退出時(shí)銷(xiāo)毀。

  Java按照內(nèi)存使用區(qū)域可以分為四個(gè)部分:堆、棧、方法區(qū)和程序計(jì)數(shù)器;其中棧又可以分為兩大部分:Java虛擬機(jī)棧和本地方法棧;下面我將通過(guò)自己的學(xué)習(xí)與別人總結(jié)的參考見(jiàn)解來(lái)介紹下jvm

圖片1

圖片1

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

  程序計(jì)數(shù)器是一塊較小的內(nèi)存空間,它被用來(lái)記錄當(dāng)前指令執(zhí)行程序的位置,在內(nèi)部通過(guò)改變計(jì)數(shù)器的位置來(lái)確定下一條指令執(zhí)行程序的位置;

  我們知道Java多線程的實(shí)質(zhì)是通過(guò)線程輪流切換并分配處理執(zhí)行事件來(lái)實(shí)現(xiàn)的,而在任何一個(gè)確定的時(shí)刻,一個(gè)處理器只會(huì)執(zhí)行一個(gè)線程中的一條指令。為了能讓線程切換后仍然能恢復(fù)到原來(lái)的位置,每個(gè)線程都需要有一個(gè)獨(dú)立的程序計(jì)數(shù)器,他們之間互不影響,所以,程序計(jì)數(shù)器是線程私有的內(nèi)存區(qū)域

  如果一個(gè)線程正在執(zhí)行一個(gè)Java方法,那么程序計(jì)數(shù)器記錄的就是正在執(zhí)行的虛擬機(jī)字節(jié)碼指令的地址;如果正在執(zhí)行一個(gè)native方法,那么程序計(jì)數(shù)器的值就為空;

  程序計(jì)數(shù)器是唯一一個(gè)在Java虛擬機(jī)規(guī)范中沒(méi)有規(guī)定任何OutOfMemoryError情況的區(qū)域,在四個(gè)區(qū)域中只有它不會(huì)出現(xiàn)內(nèi)存溢出的情況

  棧之Java虛擬機(jī)棧

  Java虛擬機(jī)棧描述的是Java方法的內(nèi)存模型;每個(gè)方法在被執(zhí)行的同時(shí)都會(huì)創(chuàng)建一個(gè)Java虛擬機(jī)棧(棧幀),用于存儲(chǔ)局部變量表、操作棧、動(dòng)態(tài)鏈接和方法出口等信息,因此Java虛擬機(jī)棧也是線程私有的;

  類(lèi)似于動(dòng)畫(huà)是由一棧一棧的棧幀切換產(chǎn)生的,程序的執(zhí)行也是由棧幀的切換產(chǎn)生的,只是這些棧幀中存放的是方法的局部變量、操作棧、動(dòng)態(tài)鏈接和方法出口等信息;每一個(gè)方法被調(diào)用直至執(zhí)行完成的過(guò)程,就是一個(gè)棧幀在虛擬機(jī)棧中從入棧到出棧的過(guò)程;

  對(duì)于執(zhí)行引擎來(lái)說(shuō),只有棧頂?shù)臈怯行У模Q(chēng)為當(dāng)前棧幀,這個(gè)棧幀關(guān)聯(lián)的方法稱(chēng)為當(dāng)前方法,執(zhí)行引擎所有的字節(jié)碼指令都值針對(duì)當(dāng)前棧幀進(jìn)行操作;

  通常我們所說(shuō)的變量存儲(chǔ)在棧中是不嚴(yán)謹(jǐn)?shù)模?font face="Calibri">Java虛擬機(jī)棧中存放的是對(duì)應(yīng)方法的局部變量,而且這些局部變量存放在Java虛擬機(jī)中的局部變量表中;對(duì)于保存的局部變量分類(lèi):Java中的基本數(shù)據(jù)類(lèi)型變量的值存放在局部變量表,而對(duì)于引用類(lèi)型變量來(lái)說(shuō),局部變量表只會(huì)存放對(duì)象的引用,真正的值存放在堆中;

  Java虛擬機(jī)是使用局部變量表來(lái)完成參數(shù)值到參數(shù)變量表的傳遞過(guò)程的,系統(tǒng)不會(huì)為局部變量賦予初始值(對(duì)于實(shí)例變量和類(lèi)變量都會(huì)賦予初始值)

  在Java虛擬機(jī)規(guī)范中,對(duì)Java虛擬機(jī)棧規(guī)定了兩種異常情況:如果線程請(qǐng)求的棧深度大于虛擬機(jī)所允許的深度,將拋出StackOverflowError 異常;如果虛擬機(jī)棧動(dòng)態(tài)擴(kuò)展時(shí)無(wú)法申請(qǐng)到足夠的內(nèi)存時(shí),會(huì)拋出OutOfMemoryError 異常

  以上就是小編介紹的"Java培訓(xùn)班分享的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn)還可以點(diǎn)擊進(jìn)入Java視頻教程進(jìn)行學(xué)習(xí)。

  Java培訓(xùn)班http://Java.qfedu.com/

最新問(wèn)答資訊

01 unity用什么編程語(yǔ)言?unity學(xué)習(xí)難度大嗎

學(xué)習(xí) unity 語(yǔ)言
6020 人關(guān)注

02 python容易學(xué)嗎?學(xué)好python有什么好處?

學(xué)習(xí) python 工作 培訓(xùn)
5389 人關(guān)注

03 html是什么語(yǔ)言?html學(xué)習(xí)難嗎?

學(xué)習(xí) html 語(yǔ)言 可以
5062 人關(guān)注

04 c語(yǔ)言難學(xué)嗎?c語(yǔ)言學(xué)好要多久?

語(yǔ)言 技術(shù) 學(xué)習(xí)
4733 人關(guān)注

06 學(xué)好平面設(shè)計(jì)要多久?報(bào)速成班靠譜嗎?

平面 設(shè)計(jì) 學(xué)習(xí) 時(shí)間
4238 人關(guān)注

相關(guān)問(wèn)題

Java培訓(xùn)班的課程一般都學(xué)習(xí)什么內(nèi)容

首先是Java技術(shù)的核心和基礎(chǔ)JavaSE,這一階段會(huì)接觸到Java基礎(chǔ)語(yǔ)...

學(xué)習(xí)Java有哪些技巧嗎

java作為最經(jīng)典的編程語(yǔ)言之一受到大家的喜愛(ài),不止你我,很多人...

java程序員常用到的技術(shù)有哪些

操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)這些基礎(chǔ)知識(shí),工作之后基本都忘的差不多了...

int和integer有哪些區(qū)別?

JVM模型的介紹二

JVM模型的介紹二,接著上一篇我們繼續(xù)來(lái)分享,棧之本地方法棧。 ...

JVM模型的介紹一

Java培訓(xùn)班教程系列分享JVM模型的介紹一,Java內(nèi)存分配:JVM定義...

測(cè)一測(cè)
你知道多少I(mǎi)T梗

主站蜘蛛池模板: 思茅市| 安乡县| 藁城市| 宣汉县| 四子王旗| 蛟河市| 扎囊县| 保德县| 广东省| 新营市| 当雄县| 娄烦县| 德江县| 岐山县| 永吉县| 洞头县| 壤塘县| 怀柔区| 三河市| 牡丹江市| 江口县| 淳安县| 松江区| 蒙城县| 兴和县| 仙居县| 深泽县| 湟中县| 宝鸡市| 长治县| 莱西市| 长垣县| 夏邑县| 林甸县| 施秉县| 东丰县| 军事| 安福县| 偃师市| 台安县| 昆山市|