java虚拟机规范 51cto_java虚拟机
最近學習java虛擬機做了一些整理,會陸續(xù)發(fā)完。
Java虛擬機
一、概念:當我們談到java虛擬機的時候,有可能指下面3個方面:
1):抽象java虛擬機的規(guī)范。
2):一個java虛擬機具體的實現。------實現是指:實現需要有接口,用類實現接口,并實現接口所有方法。就是說先有一個接口,然后寫一個類實現接口中的所定義的方法。
3):一個運行中的java虛擬機實例。
而我們經常說的大多數是第三種。也就是一個正在運行的java虛擬機實例。
java虛擬機之所以被稱為“虛擬”的,就是因為它僅僅是有一個規(guī)范定義的抽象計算機。因此,運行某個java程序,首先需要一個符合該規(guī)范的具體實現。
當運行一個java程序的同時,也就在運行一個java虛擬機實例。每個java程序都運行于某個具體的java虛擬機實現的實例上。它是java編譯器和os平臺之間的虛擬處理器。負責與操作系統之間的交互
二、java虛擬機生命周期:
Java虛擬機的產生和消亡是伴隨java程序的運行和停止。也就是說當java程序運行的時候,相應的java虛擬機也就誕生了,反正消亡。其具體的實現是通過調用內部main方法來實現。
三:jvm執(zhí)行java程序的順序是什么呢?
大致如下:
Java(源代碼)——>class(字節(jié)碼)——>類加載器——>字節(jié)碼校驗器——>硬件
具體過程: 1、加載class文件
2、管理分配內存
3、執(zhí)行垃圾回收
四、Java虛擬機的體系結構:
組成部分:一系列的子系統、內存區(qū)域、數據類型和使用指南。這些構成java虛擬機的內部結構。這些組成結構實現了外部行為(java虛擬機與OS之間的實現)和實現內部行為(java虛擬機的內部之間的實現)。
類加載器子系統(class loader ?subsystem)作用:每個java虛擬機都由類加載器子系統(class ?loader subsystem)。負責加載程序中類型(類和接口)。
執(zhí)行引擎(execution ?engine):負責執(zhí)行被加載類中的包含的指令。每個java虛擬機都有一個執(zhí)行引擎(execution engine)。
內存區(qū)域:程序的執(zhí)行需要一定的內存空間。如字節(jié)碼、被加載的其他額外信息、程序中的對象、方法參數、返回值、本地變量、處理中間變量等等。Java虛擬機將這些的信息統統保存在數據區(qū)中(data areas)。雖然每個java虛擬機的實現中都包含數據區(qū),但是java虛擬機規(guī)范對數據區(qū)的規(guī)定卻非常的抽象。許多結構上的細節(jié)部分都留給了java虛擬機實現者的發(fā)揮。不同 的java虛擬機實現上的內存結構千差萬別。一部分實現可能占用很多內存,而其他一下可能只占用很少的內存。一些實現可能會使用虛擬內存。
Data ?areas:數據區(qū)中的一部分是整個程序的共有的,有其他部分被單獨的線程控制。每個虛擬機都包含方法去(method area)和堆(heap),他們被整個程序的共享的。
方法區(qū)(method area):當java虛擬機加載并解析一個類后,將從類文件中解析出來信息保存在方法區(qū)中(method area)。
堆(heap):程序執(zhí)行時的創(chuàng)建的對象保存在堆中。
其他的內存區(qū)域:
PC寄存器概念:又叫指令計數器。中央處理機中的一種寄存器,用來保存計算機的執(zhí)行程序的指令地址。
作用:保存線程執(zhí)行的下一條指令。這其中包括是否調用本地方法情況:
當不調用本地方法的時候:PC寄存器保存線程執(zhí)行下一條指令。
當線程調用本地方法的時候,pc寄存器不保存線程的下一條執(zhí)行指令。
Javastacks(java 堆棧)作用:保存一個線程的調用方法的狀態(tài),包括本地變量、調用方法的參數、返回值、處理的中間變量。調用本地方法的時的狀態(tài)保存在本地方法堆棧中(native method stacks),也可能在寄存器中。
Javastacks是由java堆棧塊組成。而堆棧塊包含java方法調用的狀態(tài)。
Java虛擬機不使用寄存器保存中間結果,而是用java堆棧中存放中間結果。
好處:使java虛擬機的指令更緊湊,也更容易在一個沒寄存器的設備上實現java虛擬機。
數據類型(data types):每個java虛擬機中使用的數據都有確定的數據類型。
數據類型和操作都在java虛擬機規(guī)范中嚴格定義的。其中數據類型包括原始數據類型和引用數據類型。
引用類型依賴于實際對象,但不是對象本身。
原始數據類型不依賴任何東西,他們就是本身表示的數據。
總結
以上是生活随笔為你收集整理的java虚拟机规范 51cto_java虚拟机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统进程间通信 --- IPC
- 下一篇: 计算机网络 --- 数据交换方式