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堆內存
-
JDK1.8之后
image.png -
JDK1.8之前
image.png