Java虛擬機(JVM)概念簡介

虛擬機概述

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

比較出名的系統虛擬機有Visual Box、VMware,他們是完全對物理計算機的仿真,提供一個可運行完整操作系統的軟件平臺。

Java虛擬機就是典型的程序虛擬機,他專門爲執行單個計算機程序而設計的,在Java虛擬機中執行的指令我們稱爲Java字節碼指令。

無論是系統虛擬機還是程序虛擬機,在上面運行的軟件都被限制於虛擬機提供的資源中,比如java虛擬機我們可以設置堆內存大小,VMware的虛擬機我們可以設置CPU數,內存數等等。這些就是虛擬機提供的資源,軟件運行會被限制在該資源中。

java虛擬機

java虛擬機是一臺執行java字節碼的虛擬計算機,他擁有獨立的運行機制,其運行的java字節碼也未必由java源文件編譯而來。
java虛擬機是在操作系統上做了一層封裝,屏蔽了具體操作系統API的底層細節,使得java程序具有跨平臺的特性。
JVM是跨語言的,多種語言可以運行在JVM虛擬機上,從而可以利用JVM帶來的跨平臺特性和優秀的垃圾回收機制。以及可靠的即時編譯器。
在這裏插入圖片描述
多種編程語言只要提供各自的編譯器,把源代碼編譯成符合java虛擬機規範的字節碼文件,就可以在JAVA虛擬機上運行。這時應該叫JVM字節碼文件了。

java技術的核心就是JAVA虛擬機,因爲所以java程序都運行在java虛擬機內部。

java虛擬機的作用

java虛擬機就是二進制字節碼的運行環境,負責裝載字節碼到其內部,解釋/編譯成對應平臺(unix、windows等)的機器指令執行,每一條java指令,java虛擬機規範中都有其詳細定義,怎麼取操作數,怎麼處理操作數等。
特點:

  • 一次編譯,處處運行。
  • 自動垃圾回收。
  • 自動內存管理
java虛擬機的位置

在這裏插入圖片描述
java虛擬機運行在操作系統之上,沒有與硬件直接關聯,對硬件的操作都是通過操作系統間接實現。

java虛擬機在java體系中的位置:
在這裏插入圖片描述
java虛擬機是在JRE java運行時環境的最底層。

JAVA虛擬機的整體結構

在這裏插入圖片描述
java虛擬機主要分爲三個部分:

  1. 類裝載子系統:負責裝載字節碼文件到內存當中,生成Class對象。
  2. 運行時數據區:java程序運行時數據的存放,比如對象,類信息,引用等等。
  3. 執行引擎:分爲解釋器、JIT即時編譯器、垃圾回收器,把高級語言解釋編譯成機器語言,用於解釋執行java程序

java程序執行流程

在這裏插入圖片描述

  1. 首先是java源代碼經過編譯器(比如javac)進行編譯,生成字節碼文件。
  2. 字節碼文件被java虛擬機的類加載子系統裝載並生成對應的信息,比如一個個Class對象。
  3. 執行引擎對字節碼進行解釋/編譯 執行。
java虛擬機的生命週期

虛擬機的啓動:java虛擬機的啓動是通過引導類加載器(bootstrap class loader)創建一個初始類來完成的,這個類由虛擬機的具體實現指定。

虛擬機的執行:一個運行中的java虛擬機有一個清晰的任務,就是運行java程序。程序開始執行時虛擬機運行,程序執行結束它就停止。執行一個所謂的java程序的時候,真真正正在執行的是一個叫做java虛擬機的進程。 一個運行中的java進程實際上是一個java虛擬機進程。

虛擬機的退出:程序正常執行結束、程序遇到異常或者錯誤而異常終止、因爲操作系統錯誤而導致java虛擬機終止、某個線程執行RunTime類的exit方法或者half方法,或者System類的exit方法,並且java安全管理器也允許這個操作。 以上的情況都會導致java虛擬機進程退出。

java虛擬機的種類

java虛擬機有多種多樣的種類,由不同的廠商提供,比如HotSpot VM、SUN Classic VM、Exact VM等等。不同的虛擬機的具體實現會有所不同,但是都遵循着java虛擬機的規範。

HotSpot虛擬機:目前HotSpot虛擬機佔有絕對的市場地位,不管JDK6、JDK8、SUN/Oracle JDK 和Open JDK的默認虛擬機都是HotSpot。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章