成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java虛擬機及JVM體系結(jié)構(gòu)

開發(fā) 后端
Java虛擬機,java源文件(.java)通過編譯器生成字節(jié)碼文件(.class),字節(jié)碼文件(.class)通過JVM(Java虛擬機)中的解釋器再翻譯成特定機器上的機器碼

JVM(Java 虛擬機)

Java虛擬機,java源文件(.java)通過編譯器生成字節(jié)碼文件(.class),字節(jié)碼文件(.class)通過JVM(Java虛擬機)中的解釋器再翻譯成特定機器上的機器碼。

編譯程序只需要面向虛擬機,生成虛擬機能夠理解的代碼,然后由解釋器來將虛擬機代碼轉(zhuǎn)換為特定系統(tǒng)的機器碼執(zhí)行。

每一種平臺的解釋器是不同的,但是實現(xiàn)的虛擬機是相同的。

Java源程序經(jīng)過編譯器編譯后變成字節(jié)碼,字節(jié)碼由虛擬機解釋執(zhí)行,虛擬機將每一條要執(zhí)行的字節(jié)碼送給解釋器,解釋器將其翻譯成特定機器上的機器碼,然后在特定的機器上運行。

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

JVM都有兩種機制,一個是裝載具有合適名稱的類(類或是接口),叫做類裝載子系統(tǒng);另外的一個負責執(zhí)行包含在已裝載的類或接口中的指令,叫做運行引擎。每個JVM又包括方法區(qū)、堆、Java棧、程序計數(shù)器和本地方法棧這五個部分,這幾個部分和類裝載機制與運行引擎機制一起組成的體系結(jié)構(gòu)圖為:

JVM的每個實例都有一個它自己的方法域和一個堆,運行于JVM內(nèi)的所有的線程都共享這些區(qū)域;當虛擬機裝載類文件的時候,它解析其中的二進制數(shù)據(jù)所包含的類信息,并把它們放到方法域中;當程序運行的時候,JVM把程序初始化的所有對象置于堆上;而每個線程創(chuàng)建的時候,都會擁有自己的程序計數(shù)器和Java棧,其中程序計數(shù)器中的值指向下一條即將被執(zhí)行的指令,線程的Java棧則存儲為該線程調(diào)用Java方法的狀態(tài);本地方法調(diào)用的狀態(tài)被存儲在本地方法棧,該方法棧依賴于具體的實現(xiàn)。

(1)類裝載子系統(tǒng)

裝載 連接 初始化

(2)方法區(qū)。被所有線程共享。垃圾收集也會清理方法區(qū)中的無用類型對象。

a. 類型信息。類加載器加載類時,從類文件中提取出來。

類的完整有效名

父類的完整有效名(interface and java.lang.Object 除外,因為無父類)

類型的修飾符

類型直接接口列表

b. 常量池。存儲了一個類型所使用的常量所有類型、域和方法的符號引用。

c. 域信息。jvm必須在方法區(qū)中保存類型的所有域的相關(guān)信息以及域的聲明順序, 域的相關(guān)信息包括: 域名 域類型 域修飾符(public private protected static final volatile transient…)

d.方法信息。

方法名

方法返回類型

方法參數(shù)

方法的修飾符

方法的字節(jié)碼(abstract and native 除外)(被PC寄存器指向)

操作數(shù)棧和方法棧幀的局部變量區(qū)的大小

異常表

e. 類的靜態(tài)變量(所有對象共享一分拷貝)

f. 類的被聲明為final的類變量(所有對象共享一分拷貝)

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

h. Class類的引用

i. 方法表。

j. 一個例子:

  1. Class Lava { 
  2. private int speed = 5
  3. void flow(); 
  4. Class Volcano { 
  5. public static void main(String[] args) { 
  6. Lava lava = new Lava(); 
  7. lava.flow(); 

下面我們描述一下main()方法的***條指令的字節(jié)碼是如何被執(zhí)行 的。不同的jvm實現(xiàn)的差別很大,這里只是其中之一。

為了運行這個程序,你以某種方式把“Volcano"傳給了jvm。有了 這個名字,jvm找到了這個類文件(Volcano.class)并讀入,它從 類文件提取了類型信息并放在了方法區(qū)中,通過解析存在方法區(qū)中的 字節(jié)碼,jvm激活了main()方法,在執(zhí)行時,jvm保持了一個指向當前 類(Volcano)常量池的指針。

注意jvm在還沒有加載Lava類的時候就已經(jīng)開始執(zhí)行了。正像大多數(shù)的 jvm一樣,不會等所有類都加載了以后才開始執(zhí)行,它只會在需要的時候 才加載。

main()的***條指令告知jvm為列在常量池***項的類分配足夠的內(nèi)存。 jvm使用指向Volcano常量池的指針找到***項,發(fā)現(xiàn)是一個對Lava類 的符號引用,然后它就檢查方法區(qū)看lava是否已經(jīng)被加載了。

這個符號引用僅僅是類lava的完整有效名”lava“。這里我們看到為了jvm 能盡快從一個名稱找到一個類,一個良好的數(shù)據(jù)結(jié)構(gòu)是多么重要。這里jvm 的實現(xiàn)者可以采用各種方法,如hash表,查找樹等等。同樣的算法可以用于 Class類的forName()的實現(xiàn)。

當jvm發(fā)現(xiàn)還沒有加載過一個稱為"Lava"的類,它就開始查找并加載類 文件"Lava.class"。它從類文件中抽取類型信息并放在了方法區(qū)中。

jvm于是以一個直接指向方法區(qū)lava類的指針替換了常量池***項的符號 引用。以后就可以用這個指針快速的找到lava類了。而這個替換過程稱為 常量池解析(constant pool resolution)。在這里我們替換的是一個 native指針。

jvm終于開始為新的lava對象分配空間了。這次,jvm仍然需要方法區(qū)中 的信息。它使用指向lava數(shù)據(jù)的指針(剛才指向volcano常量池***項的指針) 找到一個lava對象究竟需要多少空間。

一旦jvm知道了一個Lava對象所要的空間,它就在堆上分配這個空間并把這個實例的變量speed初始化為缺省值0。假如lava的父對象也有實例變量,則也會初始化。

當把新生成的lava對象的引用壓到棧中,***條指令也結(jié)束了。下面的指令利用這個引用激活java代碼把speed變量設(shè)為初始值,5。另外一條指令會用這個引用激活 Lava對象的flow()方法。

(3)堆。存放運行時所有 對象 和 數(shù)組。

(4)棧。每次啟動一個新的線程,就會被分配一個棧。

(5)PC 寄存器(程序計數(shù)器)總是指向該線程下一步要執(zhí)行的指令。指令的位置放在方法區(qū)的方法字節(jié)碼中。內(nèi)容是相 對于***個指令的偏移量。

(6)本地方法棧。

讓我們?yōu)榱酥袊浖a(chǎn)業(yè)的振興,一起努力!

原文鏈接:http://www.cnblogs.com/huaihai/archive/2011/11/09/2242010.html

【編輯推薦】

  1. JVM崩潰的原因及解決
  2. Java技能的優(yōu)化集錦
  3. Java中Error與Exception的區(qū)別
  4. 深入JVM鎖機制之二:Lock
  5. 深入JVM鎖機制之一:synchronized
責任編輯:林師授 來源: 懷海的博客
相關(guān)推薦

2009-06-12 21:39:48

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

2011-12-28 13:24:47

JavaJVM

2010-09-16 14:36:43

Java虛擬機

2017-02-06 21:08:34

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

2020-04-15 21:43:22

JVMJavaVMware

2010-09-25 13:38:23

Inside JVM

2016-03-02 15:09:57

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

2010-09-16 15:22:30

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

2009-07-09 13:52:41

Inside JVM

2010-09-17 15:12:57

JVMJava虛擬機

2010-09-27 09:43:07

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

2020-05-08 16:55:48

Java虛擬機JVM

2011-06-22 13:35:55

JVM

2009-07-08 14:23:40

JVM是什么

2010-09-25 15:59:54

JVM虛擬機

2010-09-25 15:13:40

JVMJava虛擬機

2021-07-30 07:22:51

JVM虛擬機棧 Stack

2009-09-11 10:38:03

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

2009-06-26 15:58:28

EJB

2012-02-06 17:22:44

MySQL
點贊
收藏

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

主站蜘蛛池模板: www.久久| 国产精品国产成人国产三级 | 夜夜爽99久久国产综合精品女不卡 | 99精品亚洲国产精品久久不卡 | 自拍偷拍第一页 | 久久精品国产免费 | 成人亚洲精品久久久久软件 | 免费av毛片 | 国产一区二区在线91 | 国产精品一区二区欧美黑人喷潮水 | 国产真实精品久久二三区 | 久草福利 | 亚洲狠狠| 少妇黄色 | 在线观看视频一区二区三区 | 99热首页 | www亚洲精品 | 在线观看亚洲精品 | 99一区二区 | 一个色在线 | 一级少妇女片 | 国产精品日日夜夜 | 中文在线亚洲 | 欧美一级黄色网 | 在线播放一区二区三区 | 亚洲天堂一区 | 久久久久久久夜 | 国内在线视频 | 国产精品成人一区二区 | 97国产在线观看 | 国产91久久久久久久免费 | 国产精品自产av一区二区三区 | 欧美在线一区二区三区四区 | 欧美福利视频 | 一a一片一级一片啪啪 | www.五月婷婷.com | 精品视频一区二区在线观看 | 欧美专区日韩专区 | 亚洲一区导航 | 伊人手机在线视频 | 亚洲一区二区三区免费在线观看 |