×

Java虛擬機(jī)堆棧

  • 作者:新網(wǎng)
  • 來(lái)源:新網(wǎng)
  • 瀏覽:100
  • 2018-05-15 14:33:53

棧(stack),位于通用RAM中,但通過(guò)它的“堆棧指針”可以從處理器哪里獲得支持。堆棧指針若向下移動(dòng),則分配新的內(nèi)存;若向上移動(dòng),則釋放那些內(nèi)存。存儲(chǔ)讀取速度,僅次于寄存器。存放基本類型數(shù)據(jù)變量和對(duì)象、數(shù)組等引用類型的引用!

   棧(stack),位于通用RAM中,但通過(guò)它的“堆棧指針”可以從處理器哪里獲得支持。堆棧指針若向下移動(dòng),則分配新的內(nèi)存;若向上移動(dòng),則釋放那些內(nèi)存。存儲(chǔ)讀取速度,僅次于寄存器。存放基本類型數(shù)據(jù)變量和對(duì)象、數(shù)組等引用類型的引用!

<div>  棧幀存儲(chǔ)了方法的局部變量表、操作數(shù)棧、動(dòng)態(tài)連接和方法返回地址等信息。
20140320161534-618216595.jpg
  每一個(gè)方法從調(diào)用開(kāi)始到執(zhí)行完成的過(guò)程,就對(duì)應(yīng)著一個(gè)棧幀在虛擬機(jī)棧里面從入棧到出棧(也叫彈棧)的過(guò)程。
  對(duì)于棧,只有棧頂?shù)臈怯行У?,稱為當(dāng)前棧幀,這個(gè)棧幀所關(guān)聯(lián)的方法稱為當(dāng)前方法。執(zhí)行引擎所運(yùn)行的所有字節(jié)碼指令都只針對(duì)當(dāng)前棧幀進(jìn)行操作。
  堆(heap),是一種通用性的內(nèi)存池(也存在于RAM中),用于存放所有的JAVA對(duì)象!
  各存儲(chǔ)空間就速度來(lái)說(shuō),有如下關(guān)系:寄存器 >堆棧 > 堆 > 其它。
  棧中的數(shù)據(jù)大小和生命周期是可以確定的,當(dāng)沒(méi)有引用指向數(shù)據(jù)時(shí),這個(gè)數(shù)據(jù)就會(huì)消失。堆中的對(duì)象的由垃圾回收器gc負(fù)責(zé)回收。
  結(jié)合實(shí)例:Student student=new Student();JVM在內(nèi)存中偷偷的做了什么?
  加載Student.class文件進(jìn)入內(nèi)存
  在棧內(nèi)存中為student開(kāi)辟空間,棧內(nèi)存中的局部變量表中存放student變量
  在堆內(nèi)存中為學(xué)生對(duì)象開(kāi)辟空間
  學(xué)生對(duì)象的成員變量默認(rèn)初始化(無(wú)參構(gòu)造方法)
  學(xué)生對(duì)象的成員變量顯示初始化(有參構(gòu)造方法)(若沒(méi)有就不執(zhí)行)
  通過(guò)構(gòu)造代碼塊對(duì)學(xué)生對(duì)象進(jìn)行初始化(若沒(méi)有就不執(zhí)行)
  通過(guò)構(gòu)造方法對(duì)學(xué)生對(duì)象進(jìn)行初始化(通過(guò)構(gòu)造方法對(duì)學(xué)生對(duì)象的成員變量賦值)
  對(duì)象初始化完畢
  學(xué)生對(duì)象初始化完畢后,向外拋出產(chǎn)生的對(duì)象地址
  讓變量student指向?qū)W生對(duì)象。

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費(fèi)咨詢獲取折扣

Loading