《深入理解Java虛擬機(jī)》讀書(shū)筆記(一)——Java內(nèi)存區(qū)域

世界上并沒(méi)有完美的程序羽德,但我們并不因此而沮喪敢辩,因?yàn)閷懗绦虮緛?lái)就是一個(gè)不斷追求完美的過(guò)程济丘。 —— 書(shū)中引言

I献汗、Java技術(shù)體系

Sun定義的Java技術(shù)體系包括:

  • Java程序設(shè)計(jì)語(yǔ)言
  • Java虛擬機(jī)
  • Class文件格式
  • Java API類庫(kù)
  • 第三方Java類庫(kù)

Java程序設(shè)計(jì)語(yǔ)言旱函、Java虛擬機(jī)、Java API類庫(kù)統(tǒng)稱為JDK(Java Development Kit)泄朴,JDK是支持Java程序開(kāi)發(fā)的最小環(huán)境重抖。

Java API類庫(kù)中的Java SE API子集和Java虛擬機(jī)統(tǒng)稱為JRE(Java Runtime Environment),JRE是支持Java程序運(yùn)行的最小標(biāo)準(zhǔn)環(huán)境叼旋。

II仇哆、Java內(nèi)存區(qū)域

Java虛擬機(jī)所管理的內(nèi)存會(huì)包括一下幾個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū)域,如圖

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

  • 簡(jiǎn)介: 是一塊較小的內(nèi)存空間夫植,可以坐看是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器。通俗點(diǎn)就是執(zhí)行第幾行代碼油讯。分支详民、循環(huán)、跳轉(zhuǎn)陌兑、線程恢復(fù)等基礎(chǔ)功能都需要依賴計(jì)數(shù)器完成沈跨。
  • 特點(diǎn)
    • 線程私有: 因?yàn)槊織l線程都需要有一個(gè)獨(dú)立的程序計(jì)數(shù)器,不然會(huì)混亂兔综。
    • 唯一一個(gè)沒(méi)有規(guī)定任何OOM情況的區(qū)域
    • 如果線程正在執(zhí)行的是一個(gè)Java方法饿凛,則計(jì)數(shù)器記錄的是正在執(zhí)行的虛擬機(jī)字節(jié)碼指令的地址狞玛;如果執(zhí)行的是Native方法,計(jì)數(shù)器值為空涧窒。

2心肪、Java虛擬機(jī)棧

  • 簡(jiǎn)介: Java虛擬機(jī)棧描述Java方法執(zhí)行的內(nèi)存模型:每個(gè)方法在執(zhí)行時(shí)會(huì)創(chuàng)建一個(gè)棧幀,用于存儲(chǔ)局部變量表纠吴、操作數(shù)棧硬鞍、動(dòng)態(tài)鏈接、方法出口等信息戴已,每一個(gè)方法從調(diào)用到執(zhí)行完成固该,就對(duì)應(yīng)著一個(gè)棧幀在虛擬機(jī)棧中的入棧出棧過(guò)程。
  • 特點(diǎn)
    • 線程私有糖儡,生命周期與線程相同
    • 此區(qū)域規(guī)定了兩種異常情況:
      • 線程請(qǐng)求的棧深度大于虛擬機(jī)所允許的深度伐坏, 拋出StackOverflowError
      • 無(wú)法獲取足夠的內(nèi)存,拋出OutOfMemoryError
    • 局部變量表存放了編譯器可知的各種基本數(shù)據(jù)類型握联、對(duì)象引用著淆、returnAddress類型。其中64位的long/double類型的數(shù)據(jù)會(huì)占用2個(gè)局部變量空間(Slot)拴疤,其余數(shù)據(jù)類型占用一個(gè)永部。局部變量表所需的內(nèi)存空間在編譯期間完成分配,方法運(yùn)行期間不會(huì)改變局部變量表的大小呐矾。

3.本地方法棧

  • 簡(jiǎn)介: 本地方法棧與虛擬機(jī)棧所發(fā)揮的作用是非常相似的苔埋,區(qū)別是虛擬機(jī)棧為虛擬機(jī)執(zhí)行Java方法服務(wù),而本地方法棧為虛擬機(jī)使用到的Native方法服務(wù)蜒犯。
  • 特點(diǎn)
    • 線程私有组橄,生命周期與線程相同
    • 此區(qū)域規(guī)定了兩種異常情況:
      • 線程請(qǐng)求的棧深度大于虛擬機(jī)所允許的深度, 拋出StackOverflowError
      • 無(wú)法獲取足夠的內(nèi)存罚随,拋出OutOfMemoryError

4.Java堆

  • 簡(jiǎn)介: 對(duì)大多數(shù)應(yīng)用來(lái)說(shuō)玉工,Java堆是Java虛擬機(jī)所管理的內(nèi)存中最大的一塊,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建淘菩。此內(nèi)存區(qū)域唯一目的就是存放對(duì)象實(shí)例遵班,幾乎所有的對(duì)象實(shí)例都在這里分配內(nèi)存。
  • 特點(diǎn)
    • Java堆是垃圾收集器管理的主要區(qū)域潮改,因此又被稱為“GC堆”
    • 所有線程共享
    • Java堆可以處于物理上不連續(xù)的內(nèi)存空間中狭郑,只要邏輯上是連續(xù)的就可以。
    • 如果堆無(wú)法再擴(kuò)展時(shí)汇在,會(huì)拋出OutOfMemoryError

5.方法區(qū)

  • 簡(jiǎn)介: 方法區(qū)用于存儲(chǔ)已被虛擬機(jī)加載的類信息翰萨、常量、靜態(tài)常量糕殉、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)亩鬼。
  • 特點(diǎn)
    • 所有線程共享
    • 如果無(wú)法滿足內(nèi)存分配時(shí)殖告,會(huì)拋出OutOfMemoryError

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

  • 簡(jiǎn)介: 運(yùn)行時(shí)常量池是方法區(qū)的一部分。Class文件中除了有類的版本雳锋、字段黄绩、方法、接口等描述信息外魄缚,還有一項(xiàng)信息是常量池宝与,用于存放編譯期生成的各種字面量和符號(hào)引用,這部分內(nèi)容在類加載后進(jìn)入方法區(qū)的運(yùn)行時(shí)常量池中存放冶匹。
  • 特點(diǎn)
    • 具有動(dòng)態(tài)性习劫,運(yùn)行期間也可將常量放入池中,利用較多的就是String的intern()方法嚼隘。
    • 如果無(wú)法滿足內(nèi)存分配時(shí)诽里,會(huì)拋出OutOfMemoryError

7.直接內(nèi)存

  • 簡(jiǎn)介:直接內(nèi)存是物理機(jī)的內(nèi)存。由于JDK1.4引入了NIO類飞蛹,可以使用Native函數(shù)庫(kù)直接分配堆外內(nèi)存谤狡。
  • 特點(diǎn)
    • 會(huì)拋出OutOfMemoryError0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市卧檐,隨后出現(xiàn)的幾起案子墓懂,更是在濱河造成了極大的恐慌,老刑警劉巖霉囚,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捕仔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡盈罐,警方通過(guò)查閱死者的電腦和手機(jī)榜跌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)盅粪,“玉大人钓葫,你說(shuō)我怎么就攤上這事∑惫耍” “怎么了础浮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)库物。 經(jīng)常有香客問(wèn)我霸旗,道長(zhǎng),這世上最難降的妖魔是什么戚揭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮撵枢,結(jié)果婚禮上民晒,老公的妹妹穿的比我還像新娘精居。我一直安慰自己,他們只是感情好潜必,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布靴姿。 她就那樣靜靜地躺著,像睡著了一般磁滚。 火紅的嫁衣襯著肌膚如雪佛吓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天垂攘,我揣著相機(jī)與錄音维雇,去河邊找鬼。 笑死晒他,一個(gè)胖子當(dāng)著我的面吹牛吱型,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播陨仅,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼津滞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了灼伤?” 一聲冷哼從身側(cè)響起触徐,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狐赡,沒(méi)想到半個(gè)月后撞鹉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猾警,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年孔祸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片发皿。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崔慧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出穴墅,到底是詐尸還是另有隱情惶室,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布玄货,位于F島的核電站皇钞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏松捉。R本人自食惡果不足惜夹界,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隘世。 院中可真熱鬧可柿,春花似錦鸠踪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至目锭,卻和暖如春评汰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背痢虹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工被去, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人世分。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓编振,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親臭埋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踪央,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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