java 記憶體區域劃分
阿新 • • 發佈:2018-12-22
執行緒共享的:堆記憶體,方法區(非堆)
執行緒私有的:程式計數器,Java虛擬機器棧,本地方法棧,
1 程式計數器單屬於某個執行緒,生命週期和執行緒相同,記錄了執行緒程式指令的執行位置,當因為cpu切換,執行緒恢復執行,方法跳轉等,通過通過程式計數器來獲取下一條準備執行的指令
2 Java 虛擬機器棧,其實也可以稱為虛擬機器層面的方法棧
他也是屬於某個執行緒,生命週期和執行緒相同 ,每個java方法被執行時都會建立一個棧幀(內部儲存了Java 中的方法資訊,包括區域性變數引用,基本資料型別,操作棧,方法出口等),每一個方法的呼叫 就意味著這個方法的棧幀從入棧(方法呼叫開發)到出棧的過程(方法呼叫完畢), 可能出現stackoverflow (棧的深度超出最大限制)以及outofmemory(棧記憶體無法申請到足夠記憶體時發生 錯誤
3 本地方法棧
同Java 虛擬機器棧相同,也是屬於某個執行緒,生命週期和執行緒相同,內部儲存這所以native方法的棧幀,可能出現stackoverflow (棧的深度超出最大限制)以及outofmemory(棧記憶體無法申請到足夠記憶體時發生) 錯誤
————————————————————————————————————————————————————
4 堆記憶體
被所有執行緒共享,在虛擬機器啟動時建立,內部儲存著 物件例項, Java的記憶體回收機制 就是針對堆記憶體來執行的
5 方法區
被所有執行緒共享,用於儲存已被載入的類資訊,常量,靜態變數