方法區:儲存類資訊(類的名稱、類的全限命名、類的型別),類變數(靜態變數),編譯之後的位元組碼指令(方法)。
堆:儲存物件例項。
本地方法棧:為虛擬機器使用的native方法服務。
案例一:方法呼叫執行過程
public
static
void
main(string args)
private
static
intgetsize(int tt)
main方法執行getsize(10)方法時,虛擬機器棧中:
第一步,方法引數tt=10放入區域性變數表中。
第二步,程式計數器執行從方法區獲取的第一條位元組碼指令(new乙個例項物件),將例項物件存放在堆中,將引用存放在動態鏈結中。
第三步,程式計數器執行第二條位元組碼指令gettransinfolist()方法。
第四步,程式計數器執行size()方法。
第五步,將size的值放入區域性變數表中。
第六步,程式計數器從區域性變數表中獲取的size和引數tt執行位元組碼指令,壓入運算元棧。
第七步,執行位元組碼指令相加操作。
第八步,執行位元組碼返回指令,返回到上乙個方法執行狀態。
案例二:類的說明
/**
*@note 類的載入時:類載入到方法區
*/class ba
}
jvm的幾個執行時資料區域 轉
如下 1 public class test 10 11 public int add int a,int b 14 15 jvm例項執行乙個j a程式,首先需要通過類裝載器子系統把作為程式執行起點的類裝載到記憶體。形成可以被虛擬機器直接使用的j a型別。在上面的例子中,當test類載入完成時,jv...
執行時資料區
按理說,在介紹完前端編譯器之後,我們應該介紹如何讓 jvm 去解釋執行 這個編譯後的 class 檔案。但是感覺並不是很恰當。如果把 class 檔案比做新購買的家具,那麼如果需要把家具擺放到家裡,是不是得先了解房子的結構和布局,然後才能將家具進行正確的擺放。我們這裡介紹的 執行時資料區 相當於前面...
JVM執行時資料區
根據 jvm 規範,jvm 記憶體共分為虛擬機器棧 堆 方法區 程式計數器 本地方法棧五個部分。記憶體空間 runtime data area 中可以按照是否執行緒共享分為兩塊,執行緒共享的是方法區 method area 和堆 heap 執行緒獨享的是虛擬機器棧 vm stack 本地方法棧 na...