Java虛擬機一看就懂01

  1. Jvm內存結構
    圖片
    ---

線程隔離區域說明:

1.1、程序計數器

  • 線程私有
  • 是一塊內存空間
  • 唯一的一個在Java虛擬機規範中沒有規定任何OOM情況的區域(不會OOM?)

1.2、Java虛擬機棧

  • 線程私有
  • 聲明週期與線程相同
  • 在Java虛擬機規範中規定兩種異常狀況:
    1、線程的棧深度大於虛擬機所允許,拋出StackOverflowError異常;
    2、如果虛擬機棧可以動態擴展,當擴展到無法申請足夠的內存,拋出OOM
    PS:每一個方法在執行的同時都會創建一個棧幀(Stack Frame),用於存儲局部變量表、操作數棧、動態鏈接、方法出口等信息,每一個方法從調用到完成,就對應着一個棧幀從入棧到出棧的過程

1.3、本地方法棧

  • 線程私有
  • 聲明週期與線程相同
  • 在Java虛擬機規範中規定兩種異常狀況:
    1、線程的棧深度大於虛擬機所允許,拋出StackOverflowError異常;
    2、如果虛擬機棧可以動態擴展,當擴展到無法申請足夠的內存,拋出OOM

PS:可以看出本地方法棧和Java虛擬機棧的特徵基本一致。區別是:Java虛擬機棧爲執行Java方法服務,而本地方法棧爲Native方法服務。

線程共享區域說明:

1.4、Java堆

  • 線程共享
  • 存放對象實例
  • 虛擬機內存中最大的一塊
  • 邏輯連續,物理不需要連續
  • 存在OOM
  • 是Java垃圾回收主要的區域

1.5、方法區

  • 線程共享
  • 存儲被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼
  • ≈永久代(Permanent Generation)本質不等價
  • 不需要連續內存
  • 存在垃圾回收,但是回收區域僅限於常量池和類型的卸載
  • 存在OOM

好了,第一部分就這麼講完了,其實就這麼些內容,後面會繼續深入,慢慢來,不急不難

其實很多時候,我們只需要魚,而不是漁,吶,給你魚。

關注公衆號 watermelon_code 獲取第一手的滿足~

TO BE CONTINUE !

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