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

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

1、虛擬機簡介

一、虛擬機概念

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

二、JVM虛擬機

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

三、JVM特色

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

字節碼數據結構

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

跨平臺jvm

跨平臺的特性即JVM虛擬機能夠運行在不一樣的計算機系統上,例如常用的Linux系統,MacOS系統,Win系統,一次編譯,到處運行就是這樣理解的。編程語言

跨語言分佈式

隨着JVM的不斷髮展和優化,不少語言都藉助JVM的能力,各類編程語言通過編譯,轉換爲字節碼文件,JVM均可以識別,這也是如今Java體系下業務編程常常混語言的緣由。源碼分析

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

2、虛擬機結構

Jvm的總體結構大體以下:

一、類加載器

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

二、運行時數據區

元數據區

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

堆區

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

JVM棧

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

本地方法棧

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

程序計數器

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

三、執行引擎

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

3、生命週期

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

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

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

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

4、HotSpot虛擬機

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

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

5、源代碼地址

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集羣管理
相關文章
相關標籤/搜索