「三分鐘瞭解」JVM的知識概要整理

jvm概述

虛擬機(Virtual Machine)指通過軟件模擬的有完整硬件、完全隔離環境中的完整計算機系統。

JVM全稱是Java Virtual Machine(Java虛擬機),是抽象規範,同時也是執行已編譯 Java 字節碼的軟件,是操作系統和應用程序之間的中介。

Java的重要特性是平臺的無關性,而Java虛擬機就是實現這一特性的關鍵。 不同的系統(Linux,Windows)實現不同的Java虛擬機,都遵守同樣的規範,只存在微小的差異,所以絕大多數的Java程序都可以運行在不同的Java虛擬機之上。

JVM體系幾個重要的內容

  • JVM內存結構

運行時數據區,負責存儲運行時的數據的地方。 java設計規範中JVM的內存分成了五個部分,分別是程序計數器,Java棧,本地方法棧,Java堆以及方法區。 不同版本的JVM有些細微的差別。

  • JVM類加載機制

負責加載文件存入運行時數據區,JVM類加載機制分為五個部分:加載,驗證,準備,解析,初始化,再加上使用,卸載這兩部分就是類的整個生命週期。 有三種自帶類加載器:啟動類加載器,擴展類加載器,應用程序類加載器。 類加載器工作過程是雙親委派機制,上級優先。

  • JVM執行過程

輸入字節碼,執行相應的指令,輸出結果。 方法的執行是用棧幀入棧和出棧。執行引擎就是用來執行各個棧幀的。Java虛擬機有獨立於操作系統的字節碼指令集。 Class文件分兩部分:1、元數據,2、字節碼指令集。

  • 垃圾收集

Java堆區和方法區內存的分配和回收是動態的,垃圾回收工作主要對象。 程序計數器、虛擬機棧和本地方法棧3個區域隨線程啟動與銷燬,不需要考慮回收。 現在的收集器基本都採用分代收集算法。

  • JVM線程管理

Java線程是直接使用了平臺相關的方法去創建線程。 Windows版和Linux版本JVM使用一對一的線程模型實現的,一條Java線程就映射到一條輕量級進程中。

  • Java內存模型

每個線程都有一個工作內存,線程只可以修改自己工作內存中的數據,然後再同步回主內存,主內存由多個線程共享。

一些比較知名的商用JVM

  • Hot Spot,OpenJava或者Oracle的java都使用這個版本虛擬機。後來又合併了JRockit。
  • J9 VM,IBM開發自家使用的一個高度模塊化的JVM。
  • Dalvik,Android平臺的核心組成部分之一,但是隻是與Java有關係,並非Java虛擬機,它執行的是dex。


分享到:


相關文章: