《深入理解Java虛擬機(jī)》筆記--棧幀

棧幀

是一種數(shù)據(jù)結(jié)構(gòu)瞒窒,用于支持方法調(diào)用和方法執(zhí)行慌盯。

  • 存儲(chǔ)了方法的局部變量表、操作數(shù)棧囊嘉、動(dòng)態(tài)鏈接格嘁、方法返回信息
  • 每一個(gè)方法從調(diào)用開(kāi)始至執(zhí)行完成的過(guò)程笛求,都對(duì)應(yīng)著一個(gè)棧幀在虛擬機(jī)棧里面從入棧道出棧的過(guò)程
  • 一個(gè)棧幀需要分配多少內(nèi)存,不會(huì)受道程序運(yùn)行期變量數(shù)據(jù)的影響,而僅僅取決于具體的虛擬機(jī)實(shí)現(xiàn)
  • 在活動(dòng)線程中探入,只有位于棧頂?shù)臈攀怯行У慕瓶祝蔀楫?dāng)前棧幀,與這個(gè)棧幀相關(guān)聯(lián)的方法稱為當(dāng)前方法蜂嗽。執(zhí)行引擎運(yùn)行的所有字節(jié)碼指令都只針對(duì)當(dāng)前棧幀進(jìn)行操作苗膝。

局部變量表

是一組變量值存儲(chǔ)空間,用于存放方法參數(shù)和方法內(nèi)定義的局部變量植旧。

  • 不和類變量存在“準(zhǔn)備階段”辱揭。類變量有兩次賦值,一次是在準(zhǔn)備階段病附,賦予系統(tǒng)初始值问窃,一次是在初始化階段,賦予程序員定義的初始值胖喳。因此在初始化階段程序員沒(méi)有為類變量賦值也沒(méi)關(guān)系泡躯,類變量仍然具有一個(gè)確定的初始值贮竟。但局部變量不一樣丽焊,如果局部變量定義了但是沒(méi)有賦初始值,是不能使用的
  • 不要認(rèn)為Java中任何情況下都存在諸如整型變量默認(rèn)為0咕别,布爾類型變量默認(rèn)值為false等著用的初始值

操作數(shù)棧

也稱為操作棧技健,后入先出(那不就是先入后出嗎)

  • 當(dāng)一個(gè)方法剛剛開(kāi)始執(zhí)行的時(shí)候,這個(gè)方法的操作棧是空的惰拱,在方法的執(zhí)行過(guò)程中雌贱,會(huì)有各個(gè)字節(jié)碼指令往操作棧中寫入和讀取內(nèi)容,這就是出棧/入棧操作

動(dòng)態(tài)鏈接

每個(gè)棧幀都包含有一個(gè)指向運(yùn)行時(shí)常量池中該棧幀所屬方法的引用偿短,持有這個(gè)引用是為了支持方法調(diào)用過(guò)程中的動(dòng)態(tài)鏈接欣孤。

方法返回地址

一個(gè)方法執(zhí)行后,只有兩種方法退出昔逗,一種是遇到任何一個(gè)方法返回的字節(jié)碼指令降传,另一種是執(zhí)行過(guò)程中遇到了異常。(沒(méi)有返回值的咋算勾怒?返回空也算是返回沒(méi))

  • 方法退出后需要返回到方法被調(diào)用的位置婆排,程序才能繼續(xù)執(zhí)行,方法返回時(shí)可能需要在棧幀中保存一些信息笔链,用來(lái)幫助恢復(fù)她的上層方法執(zhí)行狀態(tài)段只。一般來(lái)說(shuō),方法正常退出時(shí)鉴扫,調(diào)用者的PC計(jì)算器的值可以作為方法地址赞枕,棧幀中可能會(huì)保存這個(gè)計(jì)數(shù)器的值。而方法異常退出,返回地址是要通過(guò)異常處理器表來(lái)確定的炕婶,棧幀中一般不會(huì)保存這個(gè)信息
  • 方法退出的過(guò)程實(shí)際就等同于把當(dāng)前棧幀出棧谍椅,因此退出時(shí)可能執(zhí)行的操作有:恢復(fù)上層的局部變量表和操作數(shù)棧,把返回值(如果有的話)壓入調(diào)用者棧幀的操作棧中古话,跳轉(zhuǎn)PC計(jì)數(shù)器的值以指向方法調(diào)用指令后面的一條指令等雏吭。

附加信息

虛擬機(jī)規(guī)范運(yùn)行具體的虛擬機(jī)實(shí)現(xiàn)增加一些規(guī)范里沒(méi)有描述的信息到棧幀中,例如相關(guān)調(diào)試等信息

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陪踩,一起剝皮案震驚了整個(gè)濱河市杖们,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肩狂,老刑警劉巖摘完,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異傻谁,居然都是意外死亡孝治,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門审磁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)谈飒,“玉大人,你說(shuō)我怎么就攤上這事态蒂『即耄” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵钾恢,是天一觀的道長(zhǎng)手素。 經(jīng)常有香客問(wèn)我,道長(zhǎng)瘩蚪,這世上最難降的妖魔是什么泉懦? 我笑而不...
    開(kāi)封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮疹瘦,結(jié)果婚禮上崩哩,老公的妹妹穿的比我還像新娘。我一直安慰自己拱礁,他們只是感情好琢锋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著呢灶,像睡著了一般吴超。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸯乃,一...
    開(kāi)封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天鲸阻,我揣著相機(jī)與錄音跋涣,去河邊找鬼。 笑死鸟悴,一個(gè)胖子當(dāng)著我的面吹牛陈辱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播细诸,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼沛贪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了震贵?” 一聲冷哼從身側(cè)響起利赋,我...
    開(kāi)封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猩系,沒(méi)想到半個(gè)月后媚送,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寇甸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年塘偎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拿霉。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吟秩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出友浸,到底是詐尸還是另有隱情峰尝,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布收恢,位于F島的核電站,受9級(jí)特大地震影響祭往,放射性物質(zhì)發(fā)生泄漏伦意。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一硼补、第九天 我趴在偏房一處隱蔽的房頂上張望驮肉。 院中可真熱鬧,春花似錦已骇、人聲如沸离钝。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)卵渴。三九已至,卻和暖如春鲤竹,著一層夾襖步出監(jiān)牢的瞬間浪读,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碘橘,地道東北人互订。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像痘拆,于是被迫代替她去往敵國(guó)和親仰禽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容