激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語(yǔ)言|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java中內(nèi)存區(qū)域的劃分與異常詳解

Java中內(nèi)存區(qū)域的劃分與異常詳解

2021-05-08 11:17linuxidc Java教程

最近在看java虛擬相關(guān)知識(shí),把每天看到的一些內(nèi)容做一個(gè)歸納總結(jié),下面這篇文章主要給大家介紹了關(guān)于Java中內(nèi)存區(qū)域的劃分與異常的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧

前言

java內(nèi)存區(qū)域主要由程序計(jì)數(shù)器、java 虛擬機(jī)棧、本地方法棧、java堆、方法區(qū)以及運(yùn)行時(shí)常量池組成。本文將給大家詳細(xì)介紹關(guān)于java內(nèi)存區(qū)域的劃分與異常的相關(guān)內(nèi)容,下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

運(yùn)行時(shí)數(shù)據(jù)區(qū)域

jvm在運(yùn)行java程序時(shí)候會(huì)將內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)域。

Java中內(nèi)存區(qū)域的劃分與異常詳解

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

線程私有??煽醋魇?當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器 ,字節(jié)碼解釋器的工作是通過(guò)改變這個(gè)計(jì)數(shù)值來(lái)讀取下一條要執(zhí)行的字節(jié)碼指令。

多線程是通過(guò)線程輪流切換并分配處理器執(zhí)行時(shí)間來(lái)實(shí)現(xiàn)的,任何一個(gè)時(shí)刻,一個(gè)內(nèi)核只能執(zhí)行一條線程中的指令。 為了線程切換后能恢復(fù)到正確的執(zhí)行位置,每條線程都需要一個(gè)獨(dú)立的程序計(jì)數(shù)器 。這就是一開(kāi)始說(shuō)的“線程私有”。如果線程正在執(zhí)行的方法是java方法,計(jì)數(shù)器記錄的是虛擬機(jī)字節(jié)碼的指令地址;如果是native方法,計(jì)數(shù)器值為空。 程序計(jì)數(shù)器是唯一一個(gè)在java虛擬機(jī)規(guī)范中沒(méi)有規(guī)定oom(outofmemoryerror)情況的區(qū)域 。

java虛擬機(jī)棧

線程私有,生命周期和線程相同。java虛擬機(jī)棧描述的是java方法的內(nèi)存模型:每個(gè)方法在執(zhí)行時(shí)都會(huì)創(chuàng)建一個(gè)棧幀,存儲(chǔ) 局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、方法出口信息 ,每一個(gè)方法從調(diào)用到結(jié)束,就對(duì)應(yīng)這一個(gè)棧幀在虛擬機(jī)棧中的進(jìn)棧和出棧過(guò)程。局部變量表保存了各種基本數(shù)據(jù)類(lèi)型(int、double、char、byte等)、對(duì)象引用(不是對(duì)象本身)和returnaddress類(lèi)型(指向了一條字節(jié)碼地址)。

這部分區(qū)域可能發(fā)生兩種異常:

  • 線程請(qǐng)求的棧深度大于虛擬機(jī)所允許的深度,拋出stackoverflowerror;
  • 虛擬機(jī)棧擴(kuò)展時(shí)無(wú)法申請(qǐng)到足夠的內(nèi)存,拋出outofmemoryerror。

本地方法棧

上述虛擬機(jī)棧為jvm執(zhí)行java方法服務(wù),本地方法則為執(zhí)行native服務(wù)。其他和虛擬機(jī)棧類(lèi)似,也會(huì)拋出stackoverflowerror、outofmemoryerror。

java堆

常說(shuō)的“棧內(nèi)存”、“堆內(nèi)存”,其中前者指的是虛擬機(jī)棧,后者說(shuō)的就是java堆了。 java堆是被線程共享的 。在虛擬機(jī)啟動(dòng)時(shí)被創(chuàng)建。

java堆的作用是存放對(duì)象實(shí)例,java堆可以處于物理上不連續(xù)的內(nèi)存空間中,只要求邏輯上連續(xù)即可。

方法區(qū)

線程共享的區(qū)域。存儲(chǔ)已被虛擬機(jī)加載的類(lèi)信息、常量、靜態(tài)變量、即使編譯器編譯后的代碼等數(shù)據(jù)。方法區(qū)無(wú)法滿足內(nèi)存分配需求時(shí),拋出outofmemoryerror。

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

運(yùn)行時(shí)常量池 是方法區(qū)的一部分 。c用于存放編譯期生成的各種字面常量和符號(hào)引用,將在類(lèi)加載后進(jìn)入方法區(qū)的運(yùn)行時(shí)常量池中存放。 java語(yǔ)言不要求常量只能在編譯期產(chǎn)生,換言之,在運(yùn)行期間也能將新的常量放入 。

直接內(nèi)存

直接內(nèi)存不屬于虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分,也不是內(nèi)存區(qū)域。本機(jī)直接內(nèi)存的分配不會(huì)受到j(luò)ava堆的大小限制,但終究是內(nèi)存,如果各個(gè)內(nèi)存區(qū)域總和大于物理內(nèi)存限制,還是會(huì)出現(xiàn)outofmemoryerror。

對(duì)象的創(chuàng)建過(guò)程

虛擬機(jī)遇到一條"new"指令:

  • 首先檢查這個(gè)指令的參數(shù)是否能在常量池中定位到一個(gè)類(lèi)的符號(hào)引用;
  • 檢查這個(gè)符號(hào)引用代表的類(lèi)是否已被加載、解析、初始化;(如果沒(méi)有,則必須先進(jìn)行類(lèi)的加載)
  • 在java堆中為新對(duì)象分配內(nèi)存,所需大小在類(lèi)加載后就確定了;
  • 將分配到的內(nèi)存空間都初始化為0(不包括對(duì)象頭)
  • 類(lèi)的初始化,即init方法,吧對(duì)象按照程序員的意愿初始化為想要的值。

對(duì)象的內(nèi)存布局

對(duì)象在內(nèi)存中存儲(chǔ)的布局可以分為3塊區(qū)域:

  1. 對(duì)象頭
  2. 實(shí)例數(shù)據(jù)
  3. 對(duì)齊補(bǔ)充

對(duì)象頭:存儲(chǔ)對(duì)象自身的運(yùn)行時(shí)數(shù)據(jù),比如哈希碼、gc分代年齡、鎖狀態(tài)標(biāo)志、線程持有的鎖、偏向線程id等。另外還有一部分是類(lèi)型指針, 即對(duì)象指向它的類(lèi)元數(shù)據(jù)的指針,虛擬機(jī)通過(guò)該指針來(lái)確定這個(gè)對(duì)象屬于哪個(gè)類(lèi)的實(shí)例。

實(shí)例數(shù)據(jù):對(duì)象真正有效的信息,在程序中定義的各種類(lèi)型的字段內(nèi)容;

對(duì)齊補(bǔ)充:非必須,占用符的作用。

對(duì)象的訪問(wèn)定位

java程序通過(guò)棧上的引用來(lái)操作堆上的實(shí)例對(duì)象。比如

?
1
person p = new person();

這里p就是引用,new出來(lái)的person對(duì)象是實(shí)例。

這個(gè)引用沒(méi)有規(guī)定要如何定位、訪問(wèn)堆中的對(duì)象具體位置。主流的有兩中訪問(wèn)方式:

句柄。java堆中會(huì)劃分出一塊內(nèi)存作為句柄池,引用存儲(chǔ)了對(duì)象的句柄地址,而句柄中包含了對(duì)象實(shí)例數(shù)據(jù)和類(lèi)型數(shù)據(jù)。好處是,對(duì)象被移動(dòng)時(shí),只需改變句柄中的地址,引用本身無(wú)需修改。
直接指針。 引用中存儲(chǔ)的直接就是對(duì)象地址 。好處是速度更快,由于引用直接表示實(shí)例對(duì)象的地址,節(jié)省了一次指針定位操作。sun hotspot使用的正是這種方式。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)服務(wù)器之家的支持。

原文鏈接:https://www.linuxidc.com/Linux/2018-06/152788.htm

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 2019中文字幕在线播放 | 欧美日韩激情 | 成人黄色在线免费观看 | 国产精品免费麻豆入口 | 在线1区 | 国产色91| 羞羞视频免费观看网站 | 精品国产一区二区三区四区在线 | 九九视频精品在线 | 毛片免费观看日本中文 | 中文字幕网在线 | 国产成人精品区一区二区不卡 | 不卡国产一区二区三区四区 | 狠狠干夜夜操 | 久久久麻豆 | 亚洲国产精品久久久久久久 | 亚洲精品成人18久久久久 | 欧美精品网址 | 亚洲第一成人久久网站 | 午夜精品福利影院 | 精品国产一区二区三区久久久蜜 | 久久精品国产久精国产 | 国产成人高清在线观看 | 1级片在线观看 | 草草视频免费观看 | 久久精品视频在线免费观看 | 久久综合一区 | 麻豆小视频在线观看 | 国产一区毛片 | 福利在线播放 | 久久精品日产高清版的功能介绍 | 欧美黄色三级视频 | 黄色视频一级毛片 | 91av亚洲| 91精品动漫在线观看 | 欧美a级大胆视频 | 在线观看免费视频麻豆 | 91看片片| 久久午夜免费视频 | 久久久国产精品免费观看 | 色人久久 |