JVM03Java代码执行流程
一、Java的跨平臺性
Java代碼的執行流程
jvm運行原理:
運行一個HelloWorld的類,運行完畢之后,文件夾里出現HelloWorld.class的文件
javac程序是一個Java編譯器。它將文件HelloWorld.java編譯成HelloWorld.class文件,并發送到java虛擬機。虛擬機執行編譯器放在class文件中的字節碼。
JVM 加載 class 文件的原理機制如上圖的Java代碼執行流程圖,
JVM 中類的裝載是由類加載器(ClassLoader)和它的子類來實現的,Java 中的類加載器是 一個重要的 Java 運行時系統組件,它負責在運行時查找和裝入類文件中的類。
由于 Java 的跨平臺性,經過編譯的 Java 源程序并不是一個可執行程序,而是一個或多個類文件。 當 Java 程序需要使用某個類時,JVM 會確保這個類已經被加載、連接(驗證、準備和解析)和 初始化。
類的加載是指把類的.class 文件中的數據讀入到內存中,通常是創建一個字節數組讀 入.class 文件,然后產生與所加載類對應的 Class 對象。加載完成后,Class 對象還不完整,所以此時的類還不可用。當類被加載后就進入連接階段,這一階段包括驗證、準備(為靜態變量分 配內存并設置默認的初始值)和解析(將符號引用替換為直接引用)三個步驟。最后 JVM 對類 進行初始化,包括:1)如果類存在直接的父類并且這個類還沒有被初始化,那么就先初始化父類; 2)如果類中存在初始化語句,就依次執行這些初始化語句。
類的加載是由類加載器完成的,類加載器包括:根加載器(BootStrap)、擴展加載器(Extension)、 系統加載器(System)和用戶自定義類加載器(java.lang.ClassLoader 的子類)。從 Java 2(JDK 1.2)開始,類加載過程采取了父親委托機制(PDM)。PDM 更好的保證了 Java 平臺的安全性, 在該機制中,JVM 自帶的 Bootstrap 是根加載器,其他的加載器都有且僅有一個父類加載器。類的加載首先請求父類加載器加載,父類加載器無能為力時才由其子類加載器自行加載。JVM 不會向 Java 程序提供對 Bootstrap 的引用。
下面是關于幾個類加載器的說明:
Bootstrap:一般用本地代碼實現,負責加載 JVM 基礎核心類庫(rt.jar);
Extension:從 java.ext.dirs 系統屬性所指定的目錄中加載類庫,它的父加載器是 Bootstrap;
System:又叫應用類加載器,其父類是 Extension。它是應用最廣泛的類加載器。它從環境變量 classpath 或者系統屬性 java.class.path 所指定的目錄中記載類,是用戶自定義加載 器的默認父加載器。
(2)java的“一次編譯到處運行”又是怎么做到的呢?
虛擬機可以理解成一個以字節碼為機器指令的CPU。
對于不同的運行平臺,有不同的虛擬機。
java虛擬機機制屏蔽了底層運行平臺的差別,實現了“一次編譯,隨處運行”。
總結
以上是生活随笔為你收集整理的JVM03Java代码执行流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php下拉上滑分页,Flutter实现下
- 下一篇: The Innovation | 中国开