Java虛擬機詳解(一)------簡介

  本系列博客咱們將以當前默認的主流虛擬機HotSpot 爲例,詳細介紹 Java虛擬機。以 JDK1.7 爲主,同時介紹與 JDK1.8 的不一樣之處,經過Oracle官網以及各類文獻進行整理,並加以驗證,力求保證這塊知識的正確性,完整性。html

  如下是本系列博客參考的相關文檔:java

  ①、JDK1.7虛擬機規範:https://docs.oracle.com/javase/specs/jvms/se7/html/index.html編程

    JDK1.8虛擬機規範:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html服務器

  ②、Oracle Java SE 8 產品組件:https://docs.oracle.com/javase/8/docs/index.html架構

  ③、周志明老師:《深刻理解Java虛擬機:JVM高級特性與最佳實踐》oracle

  ④、陳濤老師:《HotSpot實戰》app

一、Oracle Java SE 8 產品組件

  經過上面給定的地址,咱們能夠看到以下這張圖:jvm

  

  一般來講 Java平臺標準版(Java SE)包括 Java SE開發工具包(JDK)和Java SE運行時環境(JRE)。編程語言

  JRE提供了運行以Java編程語言編寫的applet和應用程序所必需的庫,Java虛擬機和其餘組件;JDK包括JRE以及編譯器和調試器等命令行開發工具,能夠用來開發Java應用程序 工具

  PS:JDK包含JRE,咱們一般安裝JDK的同時也會安裝JRE。

二、虛擬機

  上圖的最下一行Java虛擬機是被 JRE 所包含,咱們在介紹Java虛擬機時,先了解虛擬機的概念。

  所謂虛擬機,其實就是一臺虛擬的機器,能夠用來執行一系列虛擬的命令。大致上虛擬機能夠分爲兩種:系統虛擬機和程序虛擬機。

  ①、系統虛擬機:是徹底對物理計算機的仿真,能夠說和一臺真實的PC操做系統沒什麼區別。好比經常使用的 Vmare 以及 Visual Box 軟件,經過這些軟件可以模擬出具備完整硬件系統功能的、運行在一個徹底隔離環境中的完整計算機系統。

  ②、程序虛擬機:專門爲執行單個計算程序而產生,最典型的就是Java虛擬機,在Java虛擬機中執行字節碼文件命令。

三、Java虛擬機

  瞭解了什麼是虛擬機,咱們再看什麼是 Java虛擬機。

  Java虛擬機能夠看作是一臺抽象的計算機,如同真實的計算機那樣,它有本身的指令集以及各類運行時內存區域,它與Java語言沒有必然的聯繫,只與特定的二進制文件——class 文件格式關聯(字節碼文件),能夠經過Java語言或者其餘語言編寫的程序編譯成class文件,而後在Java虛擬機上運行。Java虛擬機有如下二個特色:

  ①、語言無關

  Java虛擬機只和class文件關聯,因此只要你編寫程序的語言可以編譯成class文件,那麼都可以在Java虛擬機上運行。

  

 

  ②、平臺無關

  Java從誕生之初就宣傳的一個口號:一次編寫,處處運行。

  也就是說Java是一個跨平臺的語言,那麼Java是如何實現跨平臺的呢?

  其實Java之因此跨平臺是由於Java虛擬機的適配,不一樣的系統實現不一樣的Java虛擬機。Java虛擬機就至關於操做系統和應用程序之間的中介,每種平臺安裝適應該平臺的Java虛擬機,那麼咱們編寫的程序固然可以在任意平臺運行。

  

四、Java虛擬機種類

  商用虛擬機:

   ①、Sun HotSpot

  該虛擬機性能優越,是 sun JDK1.3 及之後全部 sun JDK 版本默認的虛擬機,使用最爲普遍,本系列博客就是以這個虛擬機爲平臺進行介紹。

  

  ②、BEA  JRockit

  JRockit 虛擬機是 BEA 公司於 2002 年從 Appeal Virtual Machines 收購得到的虛擬機。它是一款面向服務器硬件和服務端使用場景高度優化過得虛擬機,曾經號稱是「世界上速度最快的虛擬機」。因爲專一於服務端應用,它的內部不包含解析器的實現,所有代碼都靠即時編譯器編譯後執行。

  ③、IBM J9

  J9 虛擬機是 IBM 公司單獨開發的高性能虛擬機,它並不獨立出售,而是做爲 IBM 公司各類產品的執行平臺,IBM 把它定義爲一個能夠適應從嵌入式設備到大型企業級應用的、高可移植性的Java運行平臺。

  ④、Sun Classic 

  這個虛擬機很原始,是 JDK1.0 時代使用的Java虛擬機,是各類虛擬機的鼻祖,它的內部不存在即時編譯器,只能使用純解釋的方式運行。

  ⑤、Sun Exact 

  這是 Sun 公司在 HotSpot 以外的另外一個虛擬機,在 JDK1.2 時代曾短暫的投入過商用,它和 HotSpot 同時開發,但最終被 HotSpot 取代。

  ⑥、Apache Harmony 

  Harmony 是 Apache 軟件基金會主導的、開源的、獨立的、實際兼容與 JDK1.5 和 JDK1.6的虛擬機實現,它間接催生了 Google Android 平臺的 Dalvik 虛擬機,Android 的影響力如今有多大不用多說,目前已是最成功的的數碼設備通用平臺。可是因爲它的 TCK 受權問題,直接致使 Apache 與 Oracle 的決裂,從而退出了 JCP 組成,這是近代 Java 陣營遇到的最嚴重的分裂危機。

  嵌入式虛擬機

  ①、Dalvik

  Dalvik 虛擬機是 Google 等廠商合做開發的 Android 移動設備平臺的核心組成部分之一,它執行 dex(Dalvik Executable) 文件而不是 class 文件,使用寄存器架構而不是棧架構,可是它的開發體系與Java有着千絲萬縷的關係,能夠直接使用大部分的 Java API、dex 文件能夠直接從class文件轉化而來。而且在 Android 2.2 中提供了即時編譯器的實現,性能大大的提升。

  ②、KVM

  在 Android、IOS 等智能手機操做系統出現以前,曾普遍應用於手機平臺的一種虛擬機。

  ③、CDC/CLDC HotSpot

  CDC和 CLDC HotSpot 分別是 Sun 針對高端嵌入式設備和中低端嵌入式設備的虛擬機,用來代替 KVM。

相關文章
相關標籤/搜索