Java基礎(chǔ)_虛擬機(jī)內(nèi)存模型

前言

在學(xué)習(xí)java基礎(chǔ)的時(shí)候,我們需要了解java虛擬機(jī)是怎樣運(yùn)行的,下面我將簡單介紹一下。希望能夠幫助到你。

首先了解五種內(nèi)存模型

JVM.png
  1. 程序計(jì)數(shù)器(線程私有):保存當(dāng)前線程所執(zhí)行字節(jié)碼的位置,每個(gè)線程工作時(shí),都有一個(gè)獨(dú)立的計(jì)數(shù)器,程序計(jì)數(shù)器只為執(zhí)行java程序服務(wù),執(zhí)行native方法時(shí),程序計(jì)數(shù)器為空。
  2. Java虛擬機(jī)棧(線程私有):線程在執(zhí)行每個(gè)方法時(shí),都會(huì)創(chuàng)建一個(gè)棧陣,用來存儲(chǔ)局部變量表,操作棧、動(dòng)態(tài)鏈接,方法出口等信息,調(diào)用方法時(shí)執(zhí)行入棧,方法返回時(shí)執(zhí)行出棧。
  3. 本地方法棧(線程私有):同樣也是用來保存線程執(zhí)行方法時(shí)的信息,不同的是,執(zhí)行java方法時(shí),使用棧,執(zhí)行native方法時(shí),使用本地方法棧。
  4. 堆(線程共享):是JVM管理中最大的一塊。堆被所有的線程共享,目的是為了存放對象的實(shí)例。幾乎所有的對象實(shí)例都會(huì)放在這里。當(dāng)堆內(nèi)存沒有可用的空間時(shí),會(huì)拋出OOM異常(out of memory的簡稱,稱之為內(nèi)存溢出)。
  5. 方法區(qū)(線程共享):也是各個(gè)內(nèi)存共享的區(qū)域,又叫非堆區(qū),用于存儲(chǔ)已被虛擬機(jī)加載的類信息、常量、靜態(tài)常量。

它們分別用來存儲(chǔ)哪些信息

  1. 程序計(jì)數(shù)器(線程私有):虛擬機(jī)字節(jié)碼指令的地址或Undefind。
  2. Java虛擬機(jī)棧(線程私有):java方法(局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、方法出口)。
  3. 本地方法棧(線程私有):Native方法。
  4. 堆(線程共享):對象實(shí)例和數(shù)組。
  5. 方法區(qū)(線程共享):類信息(屬性、方法)、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼,如static、class。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容