1. 程式人生 > >《深入理解Java虛擬機器》讀書筆記4-執行時記憶體區域

《深入理解Java虛擬機器》讀書筆記4-執行時記憶體區域

Java執行時資料區域

 

  Java執行時資料區域如下圖所示:

       

 

 

  1. l  程式計數器:較小的記憶體空間,當前程式所執行的位元組碼的行號指示器。如果執行一個java方法,計數器記錄正在執行的虛擬機器位元組碼指令地址;如果執行native方法,計數器為空。
  2. l  虛擬機器棧:執行緒私有的,java方法執行記憶體模型。儲存區域性變量表、運算元棧、動態連結、方法出口等。執行緒請求的棧深度大於虛擬機器允許的深度則丟擲stackOverflowError;若虛擬機器能夠動態擴充套件,在擴充套件時無法申請到足夠的記憶體丟擲OutOfMemoryError。
  3. l  本地方法棧:類似虛擬機器棧,只是本地方法棧是為native方法服務。類似虛擬機器棧。
  4. l  Java堆(GC堆):所有執行緒共享,在虛擬機器啟動時建立,存放物件例項以及陣列。當物件例項沒有記憶體分配了,堆無法擴充套件則丟擲OutOfMemoryError。
  5. l  方法區(Non-Heap非堆):所有執行緒共享,儲存已被虛擬機器載入的類資訊、常量、靜態變數(有的說法時再jdk7中為了移除永久代,把靜態變數放到了Class物件中https://www.zhihu.com/question/59174759 )、及時編譯器編譯後的程式碼等,記憶體不足時丟擲OutOfMemoryError。
  6. l  執行時常量池:方法區的一部分,存放編譯期生成的各種字面量和符號引用。