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

術語匯編 JVM技術全面解析

開發(fā) 后端
這里向大家描述一下JVM的概念,JVM就是指Java虛擬機,說起Java,人們首先想到的是Java編程語言,然而事實上,Java是一種技術,它由四方面組成:Java編程語言、Java類文件格式、Java虛擬機和Java應用程序接口(JavaAPI)。

本文和大家一起學習一下JVM技術,JVM的意思是Java虛擬機,Java虛擬機(JavaVirtualMachine)簡稱JVMJava虛擬機是一個想象中的機器,在實際的計算機上通過軟件模擬來實現(xiàn)。

1Java技術與Java虛擬機

說起Java,人們首先想到的是Java編程語言,然而事實上,Java是一種技術,它由四方面組成:Java編程語言、Java類文件格式、Java虛擬機和Java應用程序接口(JavaAPI)。它們的關系如下圖所示:

Java四個方面的關系

圖1Java四個方面的關系

運行期環(huán)境代表著Java平臺,開發(fā)人員編寫Java代碼(.java文件),然后將之編譯成字節(jié)碼(.class文件)。最后字節(jié)碼被裝入內(nèi)存,一旦字節(jié)碼進入虛擬機,它就會被解釋器解釋執(zhí)行,或者是被即時代碼發(fā)生器有選擇的轉(zhuǎn)換成機器碼執(zhí)行。從上圖也可以看出Java平臺由Java虛擬機和Java應用程序接口搭建,Java語言則是進入這個平臺的通道,用Java語言編寫并編譯的程序可以運行在這個平臺上。這個平臺的結(jié)構如下圖所示:

Java平臺結(jié)構

在Java平臺的結(jié)構中,可以看出,Java虛擬機(JVM)處在核心的位置,是程序與底層操作系統(tǒng)和硬件無關的關鍵。它的下方是移植接口,移植接口由兩部分組成:適配器和Java操作系統(tǒng),其中依賴于平臺的部分稱為適配器;JVM通過移植接口在具體的平臺和操作系統(tǒng)上實現(xiàn);在JVM的上方是Java的基本類庫和擴展類庫以及它們的API,利用JavaAPI編寫的應用程序(application)和小程序(Javaapplet)可以在任何Java平臺上運行而無需考慮底層平臺,就是因為有Java虛擬機(JVM)實現(xiàn)了程序與操作系統(tǒng)的分離,從而實現(xiàn)了Java的平臺無關性。

◆那么到底什么是Java虛擬機(JVM)呢?通常我們談論JVM時,我們的意思可能是:

對JVM規(guī)范的的比較抽象的說明;

對JVM的具體實現(xiàn);

在程序運行期間所生成的一個JVM實例。

對JVM規(guī)范的的抽象說明是一些概念的集合,它們已經(jīng)在書《TheJavaVirtualMachineSpecification》(《Java虛擬機規(guī)范》)中被詳細地描述了;對JVM的具體實現(xiàn)要么是軟件,要么是軟件和硬件的組合,它已經(jīng)被許多生產(chǎn)廠商所實現(xiàn),并存在于多種平臺之上;運行Java程序的任務由JVM的運行期實例單個承擔。在本文中我們所討論的Java虛擬機(JVM)主要針對第三種情況而言。它可以被看成一個想象中的機器,在實際的計算機上通過軟件模擬來實現(xiàn),有自己想象中的硬件,如處理器、堆棧、寄存器等,還有自己相應的指令系統(tǒng)。

JVM在它的生存周期中有一個明確的任務,那就是運行Java程序,因此當Java程序啟動的時候,就產(chǎn)生JVM的一個實例;當程序運行結(jié)束的時候,該實例也跟著消失了。下面我們從JVM的體系結(jié)構和它的運行過程這兩個方面來對它進行比較深入的研究。#p#

2Java虛擬機的體系結(jié)構

剛才已經(jīng)提到,JVM可以由不同的廠商來實現(xiàn)。由于廠商的不同必然導致JVM在實現(xiàn)上的一些不同,然而JVM還是可以實現(xiàn)跨平臺的特性,這就要歸功于設計JVM時的體系結(jié)構了。

我們知道,一個JVM實例的行為不光是它自己的事,還涉及到它的子系統(tǒng)、存儲區(qū)域、數(shù)據(jù)類型和指令這些部分,它們描述了JVM的一個抽象的內(nèi)部體系結(jié)構,其目的不光規(guī)定實現(xiàn)JVM時它內(nèi)部的體系結(jié)構,更重要的是提供了一種方式,用于嚴格定義實現(xiàn)時的外部行為。每個JVM都有兩種機制,一個是裝載具有合適名稱的類(類或是接口),叫做類裝載子系統(tǒng);另外的一個負責執(zhí)行包含在已裝載的類或接口中的指令,叫做運行引擎。每個JVM又包括方法區(qū)、堆、Java棧、程序計數(shù)器和本地方法棧這五個部分,這幾個部分和類裝載機制與運行引擎機制一起組成的體系結(jié)構圖為:

JVM的體系結(jié)構

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)。#p#

3.Java虛擬機的運行過程

上面對虛擬機的各個部分進行了比較詳細的說明,下面通過一個具體的例子來分析它的運行過程。

虛擬機通過調(diào)用某個指定類的方法main啟動,傳遞給main一個字符串數(shù)組參數(shù),使指定的類被裝載,同時鏈接該類所使用的其它的類型,并且初始化它們。例如對于程序:

  1. classHelloApp  
  2. {  
  3. publicstaticvoidmain(String[]args)  
  4. {  
  5. System.out.println(“HelloWorld!”);  
  6.  
  7. for(inti=0;i《args.length;i++)  
  8. {  
  9. System.out.println(args[i]);  
  10. }  
  11. }  
  12. }  
  13.  

 

編譯后在命令行模式下鍵入:javaHelloApprunvirtualmachine

將通過調(diào)用HelloApp的方法main來啟動java虛擬機,傳遞給main一個包含三個字符串“run”、“virtual”、“machine”的數(shù)組。現(xiàn)在我們略述虛擬機在執(zhí)行HelloApp時可能采取的步驟。

開始試圖執(zhí)行類HelloApp的main方法,發(fā)現(xiàn)該類并沒有被裝載,也就是說虛擬機當前不包含該類的二進制代表,于是虛擬機使用ClassLoader試圖尋找這樣的二進制代表。如果這個進程失敗,則拋出一個異常。類被裝載后同時在main方法被調(diào)用之前,必須對類HelloApp與其它類型進行鏈接然后初始化。鏈接包含三個階段:檢驗,準備和解析。檢驗檢查被裝載的主類的符號和語義,準備則創(chuàng)建類或接口的靜態(tài)域以及把這些域初始化為標準的默認值,解析負責檢查主類對其它類或接口的符號引用,在這一步它是可選的。類的初始化是對類中聲明的靜態(tài)初始化函數(shù)和靜態(tài)域的初始化構造方法的執(zhí)行。一個類在初始化之前它的父類必須被初始化。整個過程如下:

 

Java虛擬機的運行過程

4結(jié)束語

本文通過對JVM的體系結(jié)構的深入研究以及一個Java程序執(zhí)行時虛擬機的運行過程的詳細分析,意在剖析清楚Java虛擬機的機理。

【編輯推薦】

  1. JVM學習筆記之常見JVM機制
  2. 典型JVM參數(shù)配置方法揭秘
  3. 巧解Tomcat中JVM內(nèi)存溢出問題
  4. 新一代JVM垃圾回收算法出爐
  5. 揭露JDK,JRE,JVM三者不為人知的隱情
責任編輯:佚名 來源: bangkaow.com
相關推薦

2010-06-29 15:06:14

UML建模

2010-06-08 17:18:50

UML建模技術

2010-06-12 11:37:40

UML建模技術

2010-07-01 09:38:39

Visio UML建

2010-07-15 17:50:47

Perl模式

2010-07-28 15:21:01

Flex函數(shù)

2010-07-14 15:05:21

Perl文件句柄

2010-07-01 15:53:09

UML組件圖

2010-09-28 08:54:49

JavascriptDOM

2010-06-18 18:07:19

UML用例圖

2010-07-05 17:28:57

UML動態(tài)模型圖

2010-07-09 13:16:46

UML動態(tài)建模機制

2010-06-30 17:46:36

UML用例建模

2010-07-02 10:38:53

UML模型圖

2010-06-30 14:24:02

UML類圖建模

2010-07-01 14:04:23

UML時序圖

2010-06-07 13:02:46

Hadoop簡介

2010-08-05 14:51:36

AdobeFlex

2010-07-09 17:21:32

UML狀態(tài)圖

2010-07-13 10:21:19

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久大陆| 99久热在线精品视频观看 | 日韩在线视频免费观看 | 日一区二区 | 国产精品国产a | 国产av毛片 | 国产精品a一区二区三区网址 | 欧美日韩中文字幕 | 午夜三区 | a免费在线| 黄网站涩免费蜜桃网站 | 欧美成年视频 | 久久久精品一区 | 国产资源在线播放 | 亚洲精品久久久久久久不卡四虎 | 一区二区三区免费在线观看 | 毛片一级片| 国产高清精品一区 | 成人精品久久 | 欧美日韩精品一区二区三区视频 | 中文字幕国产日韩 | 成人在线电影在线观看 | 久久久久久久久久久福利观看 | 亚洲一区二区在线 | 九九九久久国产免费 | 国产一区二区不卡 | 人成精品 | 亚洲不卡视频 | 日韩精品在线观看一区二区三区 | 国产视频第一页 | av网站观看 | 久久精品一区二区三区四区 | 91xxx在线观看| 91爱啪啪| 日本黄色一级视频 | 亚洲欧洲精品成人久久奇米网 | 亚洲精品免费视频 | 欧美日韩精品中文字幕 | 日韩国产三区 | 欧美日韩中 | 国产一区91精品张津瑜 |