三、堆空間
基本描述
JVM啟動時創建堆區,是內存管理的核心區,通常情況下也是最大的內存空間,是被所有線程共享的,幾乎所有的對象實例都要在堆中分配內存,所以這里也是垃圾回收的重點空間。
堆棧關系
棧是JVM運行時的單位,堆是存儲單位,當棧中方法結束,相關對象失去所有引用后,不會馬上被移除堆空間,要等到垃圾收集器運行的時候。
四、虛擬機棧
虛擬機棧(Java棧)在每個線程創建時都會生成一個虛擬機棧,棧的內部是一個個棧幀單元,對應Java方法的調用,其生命周期和線程周期保持一致。用來存儲方法的局部遍歷,部分執行結果,方法的調用和返回。
棧幀是方法執行的數據集,維持執行過程中的各種數據信息,執行的方法依次入棧,棧頂存放當前要執行的方法,執行結束后出棧,對于棧沒有垃圾回收問題。
五、程序計數器
基本描述
JVM中程序計數寄存器用來存儲下一條將要執行指令的地址,執行引擎獲取到指令后進行執行,是線程私有的。它可以看作是當前線程所執行的字節碼的行號指示器。
前后關系
線程在獲取CPU的時間段內執行代碼,但是線程隨時可能沒有執行完就被掛起,等到線程A再次獲取CPU執行時,CPU 得知道執行到線程A的哪一個指令,程序計數器會存儲該動作。
六、本地方法棧
本地方法棧與虛擬機棧所起到的作用是類似的,虛擬機棧為虛擬機執行Java方法,本地方法棧管理虛擬機使用到的 本地方法,在虛擬機規范中對本地方法棧中方法使用的語言、使用方式與數據結構并沒有強制規定,因此具體的虛擬機可以自由實現它。HotSpot虛擬機直接就把本地方法棧和虛擬機棧合二為一。
最后
整理的這些資料希望對Java開發的朋友們有所參考以及少走彎路,本文的重點是你有沒有收獲與成長,其余的都不重要,希望讀者們能謹記這一點。
再免費分享一波我的Java專題面試真題+視頻學習詳解+Java進階學習書籍
(https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)**
其實面試這一塊早在第一個說的25大面試專題就全都有的。以上提及的這些全部的面試+學習的各種筆記資料,我這差不多來回搞了三個多月,收集整理真的很不容易,其中還有很多自己的一些知識總結。正是因為很麻煩,所以對以上這些學習復習資料感興趣,