您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>其它程序>

JAVA虛擬機的體系結(jié)構(gòu)及基本類型

大?。?/span>0.7 MB 人氣: 2017-09-27 需要積分:2

  JAVA虛擬機的體系結(jié)構(gòu)

  下圖是JAVA虛擬機的結(jié)構(gòu)圖,每個Java虛擬機都有一個類裝載子系統(tǒng),它根據(jù)給定的全限定名來裝入類型(類或接口)。同樣,每個Java虛擬機都有一個執(zhí)行引擎,它負責執(zhí)行那些包含在被裝載類的方法中的指令。

  JAVA虛擬機的體系結(jié)構(gòu)及基本類型

  當JAVA虛擬機運行一個程序時,它需要內(nèi)存來存儲許多東西,例如:字節(jié)碼、從已裝載的class文件中得到的其他信息、程序創(chuàng)建的對象、傳遞給方法的參數(shù),返回值、局部變量等等。Java虛擬機把這些東西都組織到幾個“運行時數(shù)據(jù)區(qū)”中,以便于管理。

  某些運行時數(shù)據(jù)區(qū)是由程序中所有線程共享的,還有一些則只能由一個線程擁有。每個Java虛擬機實例都有一個方法區(qū)以及一個堆,它們是由該虛擬機實例中所有的線程共享的。當虛擬機裝載一個class文件時,它會從這個class文件包含的二進制數(shù)據(jù)中解析類型信息。然后把這些類型信息放到方法區(qū)中。當程序運行時,虛擬機會把所有該程序在運行時創(chuàng)建的對象都放到堆中。

  JAVA虛擬機的體系結(jié)構(gòu)及基本類型

  當每一個新線程被創(chuàng)建時,它都將得到它自己的PC寄存器(程序計數(shù)器)以及一個Java棧,如果線程正在執(zhí)行的是一個Java方法(非本地方法),那么PC寄存器的值將總是指向下一條將被執(zhí)行的指令,而它的Java棧則總是存儲該線程中Java方法調(diào)用的狀態(tài)——包括它的局部變量,被調(diào)用時傳進來的參數(shù)、返回值,以及運算的中間結(jié)果等等。而本地方法調(diào)用的狀態(tài),則是以某種依賴于具體實現(xiàn)的方法存儲在本地方法棧中,也可能是在寄存器或者其他某些與特定實現(xiàn)相關(guān)的內(nèi)存區(qū)中。

  Java棧是由許多棧幀(stack frame)組成的,一個棧幀包含一個Java方法調(diào)用的狀態(tài)。當線程調(diào)用一個Java方法時,虛擬機壓入一個新的棧幀到該線程的Java棧中,當該方法返回時,這個棧幀被從Java棧中彈出并拋棄。

  Java虛擬機沒有寄存器,其指令集使用Java棧來存儲中間數(shù)據(jù)。這樣設(shè)計的原因是為了保持Java虛擬機的指令集盡量緊湊、同時也便于Java虛擬機在那些只有很少通用寄存器的平臺上實現(xiàn)。另外,Java虛擬機這種基于棧的體系結(jié)構(gòu),也有助于運行時某些虛擬機實現(xiàn)的動態(tài)編譯器和即時編譯器的代碼優(yōu)化。

  下圖描繪了Java虛擬機為每一個線程創(chuàng)建的內(nèi)存區(qū),這些內(nèi)存區(qū)域是私有的,任何線程都不能訪問另一個線程的PC寄存器或者Java棧。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

JAVA虛擬機的體系結(jié)構(gòu)及基本類型下載

相關(guān)電子資料下載

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?