JVM基本結構

image.png

PC寄存器

  • 每一個線程擁有一個PC寄存器
  • 在線程創建時創建
  • 指向下一條指令的地址
  • 執行本地方法時,PC的值為undefined

方法區

  • 保存裝載的類信息,常量,常量池,即時編譯器編譯后的代碼等數據
    • 類的版本
    • 字段
    • 方法
    • 接口
  • 通常和永久區關聯在一起
  • 垃圾回收在方法區的行為
  • 異常的定義

    JDK6時,String等常量信息置于方法區
    JDK7時,已經移到了堆

Java堆

  • 和程序開發密切相關
  • 應用系統對象都保存在Java堆中
  • 所有線程共享Java堆
  • 對分代GC來說,堆也是分代的
  • GC的主要工作區間
image.png

Java棧

  • 基本類型、運算,指向堆內存的指針
  • 線程私有,其生命周期和線程相同
  • 棧由一系列幀組成
  • 幀保存一個方法的局部變量、操作數棧、常量池指針
  • 每一次方法調用創建一個幀,并壓棧

Java虛擬機棧

  • 虛擬機棧描述的是Java方法執行的動態內存模型

  • 棧幀

    • 每個方法執行,都會創建一個棧幀,伴隨著方法從創建到執行完成。用與存儲局部變量表,操作數,動態鏈接,方法出口等
  • 局部變量表

    • 存放編譯器可知的各種基本數據類型,引用類型,returnAddress類型
  • 大小

  • StackOverFlow

本地方法棧

  • 虛擬機棧為虛擬機執行Java方法服務
  • 本地方法棧為虛擬去執行native方法服務

程序計數器

  • 是一個非常小的內存空間,它可以看作是當前線程所執行的字節碼的行號指示器。
  • 程序計數器處于線程獨占區
  • 如果線程執行的是Java方法,則計數器記錄的是正在執行的虛擬機字節碼指令的地址。如果正在執行的是nativie方法,則這個計數器的指為undefined
  • 此區域是唯一一個在Java虛擬機規范中沒有規定任何OutOfMemoryError情況的區域

對象的創建

JVM堆內存

  1. JDK1.8之后


    image.png
  2. JDK1.8之前


    image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. jvm運行數據區 1 PC寄存器 1.1 每個線程都有一個pc寄存器 1.2 在線程創建時創建 1.3 指向...
    IT小鮑閱讀 268評論 0 0
  • 一直對JVM的基本結構很困惑,今天抽空整理下。 Java Virtual Machine的簡稱即Java虛擬機 虛...
    窩牛狂奔閱讀 756評論 0 2
  • JVM基本結構 PC寄存器 線程私有 字節碼指令的行號指示器,指向下調要執行的指令地址 不會發生OOM 堆 和程序...
    忘凈空閱讀 825評論 0 0
  • JVM啟動流程 JVM基本結構 1. PC寄存器 or 程序計數器(Program Counter Registe...
    舊時的榮耀閱讀 327評論 0 0
  • #困 有時候回想小學初中高中,發現自己陷入了沒有成就感沒有自信的深深自卑里。小學初中高中,一向只能把老師教過的東西...
    蛋殼裂了閱讀 234評論 0 0