JAVA虛擬機規範讀書筆記--棧,堆,方法區(內存分配)

JAVA虛擬機運行時內存分配

  1. PC寄存器
  2. JAVA棧
  3. JAVA堆
  4. 方法區
  5. 運行常量池
  6. 本地方法棧

PC寄存器

每一條java虛擬機線程都有自己的pc寄存器,任意時刻java虛擬機只會執行一個方法的代碼,若該方法不是native的pc寄存器保存正在執行的字節碼指令地址,如果是native的pc寄存器的值爲undefined(未定義)

JAVA 棧

每一條java虛擬機線程都有自己私有的java虛擬機棧,這個棧與虛擬機線程被同時進行創建,用於存儲局部變量和一些沒有計算好的結果,java虛擬機棧不需要保證內存是連續的。
請求分配內存時超出虛擬機允許的最大容量StackOverflowError
棧在嘗試擴展空間沒有申請到足夠的內存OutOfMemoryError

JAVA 堆

堆提供一個可以供個個線程共享的運行時內存區域(對象,數組分配內存),java虛擬機堆在虛擬機啓動時就被創建了,他存儲自動內存管理系統(垃圾回收器)所管理的各種對象。
堆內存超過內存管理最大容量OutOfMerryError

方法區

方法區提供一個可以供個個線程共享的運行時內存區域,方法區在虛擬機啓動時創建,方法區是堆的邏輯組成部分,但簡單的虛擬機實現在這個區域可以不實現垃圾收集和回收。

運行常量池

運行常量池在方法區中分配。他是每一個類或接口在運行時的表達形式

本地方法棧

java虛擬機實現過程中可能用到傳統的C棧(C Stack)來支持native方法(用其他語言編寫的方法),這個棧就是本地方法棧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章