自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

五大元素組成JVM結(jié)構(gòu)

開(kāi)發(fā) 后端
虛擬機(jī)JVM結(jié)構(gòu)由寄存器、棧、廢區(qū)收集堆、存儲(chǔ)區(qū)和指令集五部分組成,這五部分是Java虛擬機(jī)的邏輯成份,不依賴任何實(shí)現(xiàn)技術(shù)或組織方式,但它們的功能必須在真實(shí)機(jī)器上以某種方式實(shí)現(xiàn)。

這里和大家重點(diǎn)描述一下JVM結(jié)構(gòu)的組成和用法,JVM結(jié)構(gòu)由五個(gè)部分組成,他們分別是一組指令集、一組寄存器、一個(gè)棧、一個(gè)無(wú)用單元收集堆(Garbage-collected-heap)、一個(gè)方法區(qū)域。

JVM結(jié)構(gòu)組成

  虛擬機(jī)JVM結(jié)構(gòu)由寄存器、棧、廢區(qū)收集堆、存儲(chǔ)區(qū)和指令集五部分組成。下面我們將逐一作出介紹。

1.寄存器(Registers)

  同其他微處理器的寄存器一樣,JVM機(jī)構(gòu)的寄存器用來(lái)存放當(dāng)前系統(tǒng)狀態(tài)。然而,基于移植性要求,JVM擁有的寄存器數(shù)目不能過(guò)多。否則,對(duì)于任何本身的寄存器個(gè)數(shù)小于JVM的移植目標(biāo)機(jī),要用常規(guī)存儲(chǔ)來(lái)模擬高速寄存器,是比較困難的。同時(shí)JVM是基于棧(Stack)的,這也使得它擁有的寄存器較少。

  JVM的寄存器包括下面四個(gè):

 ?。?)PC程序計(jì)數(shù)寄存器

  (2)optop操作數(shù)棧棧頂?shù)刂芳拇嫫鳌?/p>

 ?。?)frame當(dāng)前執(zhí)行環(huán)境地址寄存器。

 ?。?)vars局部變量首地址寄存器。

  這些寄存器長(zhǎng)度均為32位。其中PC用來(lái)記錄程序執(zhí)行步驟,其余optop,frame,vars都存放JVM棧中對(duì)應(yīng)地址,用來(lái)快速獲取當(dāng)前執(zhí)行所需的信息。

2.棧(Stack)

  JVM機(jī)構(gòu)是以棧為基本存儲(chǔ)機(jī)制的處理機(jī)。棧的特點(diǎn)是先進(jìn)后出(FILO)。對(duì)每個(gè)類(lèi)的每個(gè)方法,JVM都定義一定的??臻g,包含下面三種信息:

  (1)LocalVariables局部變量

  這是一個(gè)記錄各方法局部變量的數(shù)組,其初始地址存放在vars寄存器中。每一個(gè)數(shù)組元素的長(zhǎng)度均為32位。若變量長(zhǎng)度超過(guò)32位,如雙精度浮點(diǎn)變量或長(zhǎng)整型變量,則占據(jù)兩個(gè)元素的空間64位。

  (2)ExecutionEnviroment執(zhí)行環(huán)境

  包含代表當(dāng)前方法的棧的當(dāng)前狀態(tài)。存儲(chǔ)的信息有:

  ◆激活的前一個(gè)方法。

   ◆指向局部變量區(qū)的指針。

  ◆指向操作數(shù)棧頂和棧底的指針。

  執(zhí)行環(huán)境是執(zhí)行方法的控制中心,為解釋執(zhí)行和重新編譯提供必要的信息。例如,解釋器執(zhí)行JVM的指令iadd,將兩整型數(shù)相加,執(zhí)行分為若干步。首先,解釋器從寄存器frame中獲得當(dāng)前執(zhí)行環(huán)境。然后,在當(dāng)前執(zhí)行環(huán)境中指向操作數(shù)棧頂?shù)闹羔槪〕鲆嗉拥膬蓴?shù)。***還要將所加得的結(jié)果回送入棧。

  (3)OperandStack操作棧

  這是一個(gè)以32位為單位長(zhǎng)度,用來(lái)存儲(chǔ)JVM指令的參數(shù)的區(qū)域。

3.廢區(qū)收集堆(Garbage-CollectedHeap)

  所有的類(lèi)被實(shí)例化時(shí),所獲得的存儲(chǔ)空間都是從收集堆中分配的。此外,這個(gè)堆還要負(fù)責(zé)無(wú)用空間的回收使用。出于移植性和安全性考慮,Java不賦予程序設(shè)計(jì)員管理內(nèi)存空間的權(quán)力。因而,在編譯用new命令申請(qǐng)新對(duì)象存儲(chǔ)空間后,由解釋器負(fù)責(zé)跟蹤記錄這一塊內(nèi)存的使用情況。當(dāng)使用結(jié)束時(shí),回收空間送回堆中。在Sun公司的Java和HotJava環(huán)境中,這樣的“廢區(qū)收集”都是作為后臺(tái)線程運(yùn)行的,保證了系統(tǒng)運(yùn)行的高效性。

4.存儲(chǔ)區(qū)(MemoryArea)

  JVM機(jī)構(gòu)有兩個(gè)重要的存儲(chǔ)區(qū)域,即方法區(qū)(methodarea)和常數(shù)池區(qū)(constantpoolarea)。

  方法區(qū)存放的是類(lèi)中定義的各方法的二進(jìn)制字節(jié)碼。常數(shù)池區(qū)存放的則是方法名、類(lèi)名、域名以及字符串常數(shù)。

5.指令集(InstructionSet)

  指令集是JVM執(zhí)行的操作碼的集合。Java編譯器就是將Java源程序轉(zhuǎn)換成JVM的程序:一組JVM指令。

  JVM指令都由一個(gè)操作碼(opcode)帶上零個(gè)、一個(gè)或兩個(gè)操作數(shù)(operand)組成。操作數(shù)長(zhǎng)度不盡相同,以8位為基本長(zhǎng)度,超過(guò)8位時(shí)按BigEndian的順序截?cái)嘟M合,即高位存放在低地址字節(jié)中,而低位存放在高地址字節(jié)中。操作碼長(zhǎng)度均為8位。這限制了指令種類(lèi)最多只能為256(28)種。目前已經(jīng)被定義使用的操作碼有160種,它們包括棧操作、數(shù)組操作、算術(shù)運(yùn)算、邏輯運(yùn)算、數(shù)據(jù)類(lèi)型轉(zhuǎn)換、控制流程操作、斷點(diǎn)和異常處理等豐富而詳盡的內(nèi)容,這里不再一一贅述。

【編輯推薦】

  1. Java虛擬機(jī)概念及體系結(jié)構(gòu)
  2. 發(fā)現(xiàn)Java虛擬機(jī)內(nèi)存泄露問(wèn)題
  3. 深入Java虛擬機(jī):JVM中的Stack和Heap
  4. Java虛擬機(jī)發(fā)展回顧 為跨平臺(tái)而生
  5. Java虛擬機(jī)(JVM)中的內(nèi)存設(shè)置詳解

 

責(zé)任編輯:佚名 來(lái)源: douzhe.com
相關(guān)推薦

2010-09-29 10:33:55

J2MEJVM

2017-11-06 10:07:36

智能自動(dòng)化管理

2010-09-27 09:43:07

JVM體系結(jié)構(gòu)

2010-09-26 11:32:39

JVM結(jié)構(gòu)

2010-09-27 13:48:41

JVM內(nèi)存結(jié)構(gòu)

2011-06-22 10:14:49

JVM

2022-01-07 09:52:33

加密貨幣元宇宙美元

2019-06-04 10:40:07

2024-08-09 11:50:00

2009-12-24 09:19:48

JVMJRubyEngineYard

2017-12-25 10:34:18

技術(shù)預(yù)測(cè)機(jī)遇

2010-08-16 11:33:16

DIV定位

2010-06-30 10:57:49

UML用例圖

2013-05-07 09:24:53

BYOD

2015-10-13 17:11:46

藍(lán)牙物聯(lián)網(wǎng)

2020-03-20 10:47:51

Redis數(shù)據(jù)庫(kù)字符串

2010-07-01 14:13:51

UML時(shí)序圖

2012-07-13 15:07:03

iPad商用

2015-04-27 13:23:42

無(wú)線技術(shù)ZigBeeUWB

2009-03-19 09:55:00

OFDM無(wú)線通信技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)