Java虛擬機結(jié)構(gòu)、內(nèi)存管理相關(guān)基礎(chǔ)知識(1)

JVM結(jié)構(gòu)體系

jvm由`類加載器子系統(tǒng)`饥伊、`運行時數(shù)據(jù)區(qū)`(內(nèi)存空間)葵姥、`執(zhí)行引擎`及`本地方法接口`等組成
`運行時數(shù)據(jù)區(qū):`由方法區(qū)荷鼠、堆、java 棧榔幸、PC寄存器允乐、本地方法棧組成

在內(nèi)存空間中方法區(qū)是所有java線程共享的,而java棧削咆、本地方法棧牍疏、PC寄存器則有每個線程私有

程序計數(shù)器(program counter register)

它是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號指示器
字節(jié)碼解釋器通過改變程序計數(shù)器的值來選擇下一條需要執(zhí)行的字節(jié)碼指令,分支拨齐、跳轉(zhuǎn)鳞陨、循環(huán)等基礎(chǔ)功能都需要依賴它來實現(xiàn),所以程序計數(shù)器是線程私有的瞻惋,各線程間的計數(shù)器互不影響
當(dāng)線程在執(zhí)行一個java方法時(非本地方法)厦滤,該計數(shù)器記錄的是正在執(zhí)行的虛擬機字節(jié)碼指令的地址援岩,當(dāng)線程在執(zhí)行的是native方法時,該計數(shù)器的值為空掏导。唯一在java虛擬機規(guī)范中沒有OOM的區(qū)域

Java虛擬機棧(java stacks)

線程私有享怀,保證線程安全,生命周期與線程相同
java棧由棧幀組成碘菜,每個方法被執(zhí)行的時候都會同時創(chuàng)建一個棧幀凹蜈,調(diào)用方法時壓入棧幀,方法返回時彈出棧幀并拋棄
先進后出
對于執(zhí)行引擎來說忍啸,活動線程中只有棧頂?shù)臈怯行У难鎏梗瑘?zhí)行引擎所運行的所有字節(jié)碼指令都只針對當(dāng)前棧幀進行操作
java棧的主要任務(wù)是儲存方法參數(shù)、局部變量计雌、中間運算結(jié)果悄晃,并且提供部分其他模塊工作需要的數(shù)據(jù)

在編譯程序代碼時,棧幀中需要多大的局部變量表凿滤、多深的操作數(shù)棧都已經(jīng)完全確定來妈橄,并且寫入了方法表的code屬性之中所以程序運行期變量數(shù)據(jù)不會影響棧幀內(nèi)存大小,僅僅取決于具體的虛擬機實現(xiàn)翁脆。
在java虛擬機規(guī)范中眷蚓,棧會拋出2種異常情況

  • 1、如果線程請求的棧深度大于虛擬機所允許的深度反番,將拋出StackOverFlowerError異常
  • 2沙热、如果虛擬機在動態(tài)擴展棧無法申請到足夠的內(nèi)存空間,則拋出OutOfMemoryError異常

本地方法棧(native method stacks)

與java棧作用類似罢缸,java棧為虛擬機執(zhí)行java方法服務(wù)篙贸,本地方法棧則為使用到的本地操作系統(tǒng)(native)方法服務(wù)

Java堆(Heap)

所有線程共享的一塊內(nèi)存區(qū)域。幾乎所有的對象實例數(shù)組都在這類分配內(nèi)存
java堆可以處理在物理上不連續(xù)的內(nèi)存空間 中 枫疆,只要是邏輯上是連續(xù)就可以
如果在堆中沒有內(nèi)存可分配時爵川,并且堆也無法擴展時,將會拋出OutOfMemoryError異常

方法區(qū)(method area)

各個線程共享的內(nèi)存區(qū)域
用于存儲已經(jīng)被虛擬機加載的類信息息楔、常量寝贡、靜態(tài)常量 ,即時編譯器編譯后的代碼等數(shù)據(jù)钞螟。和java heap一樣不需要連續(xù)的內(nèi)存兔甘,可以選擇固定大小或可擴展
虛擬機規(guī)范允許該區(qū)域可以選擇不實現(xiàn)垃圾回收
根據(jù)java虛擬機規(guī)范,當(dāng)方法區(qū)無法滿足內(nèi)存分配需求時鳞滨,將拋出OutOfMemoryError異常

類加載機制

類的整個生命周期包括:加載洞焙、驗證、準(zhǔn)備、解析澡匪、初始化熔任、使用和卸載七個階段
類加載的過程包括了:加載->驗證->準(zhǔn)備 ->解析-> 初始化
順序開始,而不是按順序進行完成唁情,通常都是互相交叉地混合進行疑苔,在一個階段執(zhí)行的過程中調(diào)用激活另一個階段

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市甸鸟,隨后出現(xiàn)的幾起案子惦费,更是在濱河造成了極大的恐慌,老刑警劉巖抢韭,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件薪贫,死亡現(xiàn)場離奇詭異,居然都是意外死亡刻恭,警方通過查閱死者的電腦和手機瞧省,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳍贾,“玉大人鞍匾,你說我怎么就攤上這事∑锟疲” “怎么了橡淑?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咆爽。 經(jīng)常有香客問我梳码,道長,這世上最難降的妖魔是什么伍掀? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮暇藏,結(jié)果婚禮上蜜笤,老公的妹妹穿的比我還像新娘。我一直安慰自己盐碱,他們只是感情好把兔,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瓮顽,像睡著了一般县好。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上暖混,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天缕贡,我揣著相機與錄音,去河邊找鬼。 笑死晾咪,一個胖子當(dāng)著我的面吹牛收擦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谍倦,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼塞赂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了昼蛀?” 一聲冷哼從身側(cè)響起宴猾,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叼旋,沒想到半個月后仇哆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡送淆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年杀饵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肄满。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡帚呼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阐斜,到底是詐尸還是另有隱情衫冻,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布谒出,位于F島的核電站隅俘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏笤喳。R本人自食惡果不足惜为居,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杀狡。 院中可真熱鬧蒙畴,春花似錦、人聲如沸呜象。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恭陡。三九已至蹬音,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間休玩,已是汗流浹背著淆。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工劫狠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牧抽。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓嘉熊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扬舒。 傳聞我的和親對象是個殘疾皇子阐肤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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

  • 此文為我在學(xué)習(xí)《深入理解Java虛擬機:JVM高級特性與最佳實踐》時所做的筆記,把我認(rèn)為是重點讲坎、面試時可能會被問到...
    CyanStone閱讀 1,150評論 0 3
  • 第二部分 自動內(nèi)存管理機制 第二章 java內(nèi)存異常與內(nèi)存溢出異常 運行數(shù)據(jù)區(qū)域 程序計數(shù)器:當(dāng)前線程所執(zhí)行的字節(jié)...
    小明oh閱讀 1,130評論 0 2
  • 第6章類文件結(jié)構(gòu) 6.1 概述 6.2 無關(guān)性基石 6.3 Class類文件的結(jié)構(gòu) java虛擬機不和包括java...
    kennethan閱讀 908評論 0 2
  • 1. 安裝MySQL 執(zhí)行命令: 另外可選mysql-client和libmysqlclient-dev然后通過 ...
    ZzzsWszzZ閱讀 479評論 0 0
  • 2017/11/28/北風(fēng) 今天十月初十晨炕,我生日衫画。 許是愈加奔波忙碌,對生日一直無可無不可的我瓮栗,突發(fā)奇想跑到朋友圈...
    呆呆淺藍(lán)閱讀 1,028評論 1 2