1. 程式人生 > >java 記憶體區域劃分

java 記憶體區域劃分

執行緒共享的:堆記憶體,方法區(非堆)

執行緒私有的:程式計數器,Java虛擬機器棧,本地方法棧,

1 程式計數器單屬於某個執行緒,生命週期和執行緒相同,記錄了執行緒程式指令的執行位置,當因為cpu切換,執行緒恢復執行,方法跳轉等,通過通過程式計數器來獲取下一條準備執行的指令

2 Java 虛擬機器棧,其實也可以稱為虛擬機器層面的方法棧

他也是屬於某個執行緒,生命週期和執行緒相同 ,每個java方法被執行時都會建立一個棧幀(內部儲存了Java 中的方法資訊,包括區域性變數引用,基本資料型別,操作棧,方法出口等),每一個方法的呼叫 就意味著這個方法的棧幀從入棧(方法呼叫開發)到出棧的過程(方法呼叫完畢), 可能出現stackoverflow (棧的深度超出最大限制)以及outofmemory(棧記憶體無法申請到足夠記憶體時發生  錯誤

3 本地方法棧

同Java 虛擬機器棧相同,也是屬於某個執行緒,生命週期和執行緒相同,內部儲存這所以native方法的棧幀,可能出現stackoverflow (棧的深度超出最大限制)以及outofmemory(棧記憶體無法申請到足夠記憶體時發生)  錯誤

————————————————————————————————————————————————————

4 堆記憶體

被所有執行緒共享,在虛擬機器啟動時建立,內部儲存著 物件例項, Java的記憶體回收機制 就是針對堆記憶體來執行的

5 方法區

被所有執行緒共享,用於儲存已被載入的類資訊,常量,靜態變數