1. 程式人生 > 實用技巧 >【JVM】JVM和Java 體系架構

【JVM】JVM和Java 體系架構

  Java是一門可以跨平臺的語言,但是Java本身是不可以實現跨平臺的,需要JVM實現跨平臺。javac編譯好後的class檔案,在Windows、Linux、Mac等系統上,只要該系統安裝對應的Java虛擬機器,class檔案都可以執行。達到”一次編譯,到處執行”的效果。

一、虛擬機器介紹

1.1、虛擬機器概念

  所謂虛擬機器(Virtual Machine),就是一臺虛擬的計算機。它是一款軟體,用來執行一系列虛擬計算機指令。大體上,虛擬機器可以分為系統虛擬機器和程式虛擬機器。

  1. 大名鼎鼎的Virtual Box,VMware就屬於系統虛擬機器,它們完全是對物理計算機的模擬,提供了一個可執行完整作業系統的軟體平臺。
  2. 程式虛擬機器的典型代表就是Java虛擬機器,它專門為執行單個計算機程式而設計,在Java虛擬機器中執行的指令我們稱為Java位元組碼指令。
  3. 無論是系統虛擬機器還是程式虛擬機器,在上面執行的軟體都被限制於虛擬機器提供的資源中。

1.2、Java 虛擬機器

  1. Java虛擬機器是一臺執行Java位元組碼的虛擬計算機,它擁有獨立的執行機制,其執行的Java位元組碼也未必由Java語言編譯而成。

  2. JVM平臺的各種語言可以共享Java虛擬機器帶來的跨平臺性、優秀的垃圾回器,以及可靠的即時編譯器。

  3. Java技術的核心就是Java虛擬機器(JVM,Java Virtual Machine),因為所有的Java程式都執行在Java虛擬機器內部。

  4. Java虛擬機器就是二進位制位元組碼的執行環境,負責裝載位元組碼到其內部,解釋/編譯為對應平臺上的機器指令執行。每一條Java指令,Java虛擬機器規範中都有詳細定義,如怎麼取運算元,怎麼處理運算元,處理結果放在哪裡。

  特點:

  1. 一次編譯,到處執行
  2. 自動記憶體管理
  3. 自動垃圾回收功能

二、JVM 的位置

  JVM是執行在作業系統之上的,它與硬體沒有直接的互動

  

  JDK與JVM關係

  

三、Java 的整體結構

  1. HotSpot VM是目前市面上高效能虛擬機器的代表作之一。

  2. 它採用直譯器與即時編譯器並存的架構。

  3. 在今天,Java程式的執行效能早已脫胎換骨,已經達到了可以和C/C++程式一較高下的地步。

  4. 執行引擎包含三部分:直譯器,即時編譯器,垃圾回收器

  

四、Java 程式碼執行流程

  凡是能生成被Java虛擬機器所能解釋、執行的位元組碼檔案,那麼理論上我們就可以自己設計一套語言了

  

五、JVM 架構模型

  Java編譯器輸入的指令流基本上是一種基於棧的指令集架構,另外一種指令集架構則是基於暫存器的指令集架構。

  具體來說:這兩種架構之間的區別:

5.1、基於棧的指令集架構

  基於棧式架構的特點:

  1. 設計和實現更簡單,適用於資源受限的系統;

  2. 避開了暫存器的分配難題:使用零地址指令方式分配

  3. 指令流中的指令大部分是零地址指令,其執行過程依賴於操作棧。指令集更小,編譯器容易實現

  4. 不需要硬體支援,可移植性更好,更好實現跨平臺

5.2、基於暫存器的指令級架構

  基於暫存器架構的特點:

  1. 典型的應用是x86的二進位制指令集:比如傳統的PC以及Android的Davlik虛擬機器。

  2. 指令集架構則完全依賴硬體,與硬體的耦合度高,可移植性差

  3. 效能優秀和執行更高效

  4. 花費更少的指令去完成一項操作

  5. 在大部分情況下,基於暫存器架構的指令集往往都以一地址指令、二地址指令和三地址指令為主,而基於棧式架構的指令集卻是以零地址指令為主

5.3、兩種架構的舉例

  示例

1 public class StackStruTest {
2     public static void main(String[] args) {
3         int i = 2;
4         int j = 3;
5         int m = i + j;
6     }
7 }

  同樣執行2+3這種邏輯操作,其指令分別如下:

  • 基於棧的計算流程(以Java虛擬機器為例):
    1 iconst_2 //常量2入棧
    2 istore_1
    3 iconst_3 // 常量3入棧
    4 istore_2
    5 iload_1
    6 iload_2
    7 iadd //常量2/3出棧,執行相加
    8 istore_0 // 結果5入棧