×

Java虛擬機(jī)堆棧

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

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

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

<div>      4.Java堆
5fe3d114-83b1-4915-b2dc-75977c746cae.jpg
  是Java虛擬機(jī)所管理的內(nèi)存中最大的一塊。由所有線程共享,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建。堆區(qū)唯一目的就是存放對(duì)象實(shí)例。
  堆中可細(xì)分為新生代和老年代,再細(xì)分可分為Eden空間、From Survivor空間、To Survivor空間。
  堆無(wú)法擴(kuò)展時(shí),拋出OutOfMemoryError異常
  5.方法區(qū)
  所有線程共享,存儲(chǔ)已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。
  當(dāng)方法區(qū)無(wú)法滿足內(nèi)存分配需求時(shí),拋出OutOfMemoryError
  6.運(yùn)行時(shí)常量池
  它是方法區(qū)的一部分,Class文件中除了有類的版本、字段、方法、接口等描述信息外,還有一項(xiàng)是常量池(Const Pool Table),用于存放編譯期生成的各種字面量和符號(hào)引用。并非預(yù)置入Class文件中常量池的內(nèi)容才進(jìn)入方法運(yùn)行時(shí)常量池,運(yùn)行期間也可能將新的常量放入池中,這種特性被開(kāi)發(fā)人員利用得比較多的便是String類的intern()方法。
  當(dāng)方法區(qū)無(wú)法滿足內(nèi)存分配需求時(shí),拋出OutOfMemoryError
  7.直接內(nèi)存
  并不是虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分,也不是Java虛擬機(jī)規(guī)范中定義的內(nèi)存區(qū)域。
  JDK1.4加入了NIO,引入一種基于通道與緩沖區(qū)的I/O方式,它可以使用Native函數(shù)庫(kù)直接分配堆外內(nèi)存,然后通過(guò)一個(gè)存儲(chǔ)在Java堆中的DirectByteBuffer對(duì)象作為這塊內(nèi)存的引用進(jìn)行操作。因?yàn)楸苊饬嗽贘ava堆和Native堆中來(lái)回復(fù)制數(shù)據(jù),提高了性能。
  當(dāng)各個(gè)內(nèi)存區(qū)域總和大于物理內(nèi)存限制,拋出OutOfMemoryError異常。

免責(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