JVM第二篇 — JVM的內存模型

    先從這張圖來看JVM的內存模型,而後我再分別介紹各內存區的做用:java

            JVM內存模型

ClassLoader,類裝載子系統

    類裝載子系統根據類的全限定名獲取定義類的二進制字節流;將這個字節流所表明的靜態存儲結構轉化爲方法區中的運行時數據結構;而後在堆中建立一個表明這個類的java.lang.Class對象,做爲方法區中靜態數據的訪問入口。數據結構

Method Area, 方法區

    方法區被全部線程共享,方法區存放的信息有:線程

a. 類的類型信息,這類型信息由類加載器從類文件中提取,包括:對象

  • 類的完整有效名
  • 父類的完整有效名(interface and java.lang.Object 除外,由於無父類)
  • 類的修飾符
  • 類的直接接口列表

b. 類的static變量、final變量(全部對象共享一分拷貝)接口

c. 類的屬性信息,也稱域信息,包括:內存

  • 屬性名
  • 屬性類型
  • 屬性修飾符(public private protected static final volatile transient…)

d. 類的方法信息,包括:it

  • 方法名
  • 方法返回類型
  • 方法參數
  • 方法的修飾符
  • 方法的字節碼(abstract and native 除外)(被程序寄存器指向)
  • 操做數棧和方法棧幀的局部變量區的大小
  • 異常表

e. 常量池,用於存放類、方法的各類符號引用。變量

f. 加載一個類的類加載器的引用引用

g. Class類的引用二進制

Heap, 堆區

    堆區存放運行時的全部對象、實例,它也是GC管理的主要區域。

Java Stack, Java棧

    每啓動一個新的線程,就會被分配一個棧;每一次的方法調用,就是一次從入棧到出棧的過程。

Native Method Stack, 本地方法棧

    與Java棧相似,只是它用於本地方法調用。

Program Counter Register, 程序計數器

    程序計數器,老是指向該線程下一步要執行的指令,指令的位置放在方法區的方法字節碼中。程序計數器的值或內容是相對第一個指令的偏移量。

相關文章
相關標籤/搜索