虛擬機系列 | JVM特點,基礎結構與執行週期

本文源碼:GitHub·點這裏 || GitEE·點這裏

一、虛擬機簡介

1、虛擬機概念

虛擬機(Virtual Machine)指通過軟件模擬的具有完整硬件系統功能的、運行在一個完全隔離環境中的完整計算機系統。在實體計算機中能夠完成的工作在虛擬機中都能夠實現。在計算機中創建虛擬機時,需要將實體機的部分硬盤和內存容量作爲虛擬機的硬盤和內存容量。每個虛擬機都有獨立的CMOS、硬盤和操作系統,可以像使用實體機一樣對虛擬機進行操作。

2、JVM虛擬機

JVM是Java-Virtual-Machine的縮寫,即Java虛擬機,JVM是一種用於計算設備的規範,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。

3、JVM特點

首先一次編譯處處運行是學習Java語言都知道的事情,其實並不是Java語言跨平臺,是JVM跨平臺,Jvm運行時並不是執行Java文件,而是執行編譯後的.class文件。

字節碼

字節碼文件即JVM可以識別並執行的二進制文件,不同的編程語言經過編譯器編譯處理之後,轉換成統一的字節碼規範文件,這樣JVM就可以執行。

跨平臺

跨平臺的特性即JVM虛擬機可以運行在不同的計算機系統上,例如經常使用的Linux系統,MacOS系統,Win系統,一次編譯,處處運行就是這樣理解的。

跨語言

隨着JVM的不斷髮展和優化,很多語言都藉助JVM的能力,各種編程語言經過編譯,轉換爲字節碼文件,JVM都可以識別,這也是現在Java體系下業務編程經常混語言的原因。

注意:現在和後續Jvm系列文章都是基於HotSpot-VM和JDK1.8+版本的基礎之上。

二、虛擬機結構

Jvm的整體結構大致如下:

1、類加載器

類加載器用來加載Java類到JVM虛擬機中,源代碼程序.java文件在經過編譯器編譯之後就被轉換成字節代碼.class文件,類加載器負責讀取字節代碼,並轉換成java.lang.Class類的一個實例。

2、運行時數據區

元數據區

JDK1.8開始的說法,之前稱爲方法區Method-Area,存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據。

堆區

所有線程共享的一塊內存區域,虛擬機啓動時被創建用來存放對象實例。

JVM棧

可以參考瞭解棧的數據結構,存放Java方法執行的內存模型,在Java開發中,一個功能實現需要多個子程序方法配合,程序執行時跳往子程序前,會將下個指令的地址存到堆棧中,直到子程序執行完後再將地址取出,退回到原來的程序中。

本地方法棧

本地方法棧和虛擬機棧的功能類似,爲JVM調用native方法時服務。

程序計數器

相對較小的一塊內存空間,作用可以理解是當前線程所執行的字節碼的行號指示器。

3、執行引擎

Java虛擬機最核心的組成部分,輸入的是字節碼,處理過程是字節碼解析,輸出執行結果。

三、生命週期

這裏說的JVM生命週期,指JVM執行Java程序時的週期:

啓動初始化:啓動時通過引導類加載器創建初始類完成;

程序執行:從main方法開始,執行Java程序,直到程序執行完結束;

虛擬機退出:程序正常執行結束,或者發生異常、錯誤等而造成終止,也可以調用exit退出方法;

四、HotSpot虛擬機

HotSpot是Java體系下使用最多的虛擬機,它結合了最新的內存模型,垃圾收集器和自適應優化器,爲使用許多先進技術的Java應用程序提供了最佳性能。

主要原因:使用多,大部分的Java運行環境都依賴HotSpot虛擬機。

五、源代碼地址

GitHub·地址
https://github.com/cicadasmile/java-base-parent
GitEE·地址
https://gitee.com/cicadasmile/java-base-parent

推薦閱讀:數據源管理系列

標題
數據源管理:主從庫動態路由,AOP模式讀寫分離
數據源管理:基於JDBC模式,適配和管理動態數據源
數據源管理:動態權限校驗,表結構和數據遷移流程
數據源管理:關係型分庫分表,列式庫分佈式計算
數據源管理:PostGreSQL環境整合,JSON類型應用
數據源管理:基於DataX組件,同步數據和源碼分析
數據源管理:OLAP查詢引擎,ClickHouse集羣化管理
數據源管理:Kafka集羣環境搭建,消息存儲機制詳解
數據源管理:搜索引擎框架,ElasticSearch集羣模式
數據源管理:分佈式NoSQL系統,Cassandra集羣管理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章