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中? ? ? ?