java虛擬機(jī)內(nèi)存存儲結(jié)構(gòu)

1.Program Counter Register (程序計(jì)數(shù)器):用來標(biāo)記當(dāng)前線程所執(zhí)行的子解碼的行號指示器,每個線程都有自己的程序計(jì)數(shù)器

2.VIrtual Machine Stack(虛擬機(jī)棧):每個方法被執(zhí)行的時(shí)候java虛擬機(jī)都會同步創(chuàng)建一個桟幀,用于存儲局部變量表,操作數(shù)桟,動態(tài)連接,方法出口等信息。每個方法從被調(diào)用到執(zhí)行完畢的過程,就對應(yīng)著一個桟幀在虛擬機(jī)桟從入桟到出桟的過程。

注解:

平時(shí)說的桟大多數(shù)指的是虛擬機(jī)桟中局部變量表的部分。

局部變量表中存放了編譯期可知的各種java虛擬機(jī)基本數(shù)據(jù)類型,對象引用和returnAddress類型(指向了一條字節(jié)碼指令的地址)

虛擬機(jī)中這個區(qū)域有兩類異常情況:線程請求的桟深度大于虛擬機(jī)所允許的深度則拋出StackOerflowError異常;如果桟使用內(nèi)存超出則拋出OutOfMemoryError異常。

3.Heap(堆) 此區(qū)域的唯一目的就是存放java對象,垃圾處理器管理這部分區(qū)域,所以也稱為GC堆。

注解:

年輕代:堆中的年輕代分為eden,F(xiàn)rom Survivor ,To Survivor。對象總是在eden區(qū)創(chuàng)建。每次gc時(shí)會將eden區(qū)幸存的對象和from Suvivor中的對象存儲到ToSurvivor區(qū)中,再將eden和fromSurivor區(qū)清除,再將fromSuvivor區(qū)和toSurvivor區(qū)邏輯調(diào)換。

4.Method Area(方法區(qū),非堆, Non-Heap): 存儲已被虛擬機(jī)家在的類型信息,常量,靜態(tài)變量,即時(shí)編譯器編譯后的代碼緩存等數(shù)據(jù)。? ? ? ?

類型信息存儲在meta-space中? ? ? ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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