更新時間:2022-03-25 11:19:56 來源:動力節點 瀏覽1718次
JVM(Java虛擬機)是一種抽象機器。它是一種提供運行時環境的規范,可以在其中執行 java 字節碼。
JVM 可用于許多硬件和軟件平臺(即 JVM 是平臺相關的)。
讓我們了解一下JVM的內部架構。它包含類加載器、Java虛擬機內存區域、執行引擎等。
1.類加載器
Classloader 是 JVM 的一個子系統,用于加載類文件。每當我們運行 java 程序時,它首先由類加載器加載。Java中有三個內置的類加載器。
Bootstrap ClassLoader:這是第一個類加載器,它是擴展類加載器的超類。它加載包含Java標準版所有類文件的rt.jar文件,如java.lang包類、java.net包類、java.util包類、java.io包類、java.sql包類等。
Extension ClassLoader:這是 Bootstrap 的子類加載器和 System 類加載器的父類加載器。它加載位于$JAVA_HOME/jre/lib/ext目錄中的 jar 文件。
System/Application ClassLoader:這是擴展類加載器的子類加載器。它從類路徑加載類文件。默認情況下,類路徑設置為當前目錄。您可以使用“-cp”或“-classpath”開關更改類路徑。它也被稱為應用程序類加載器。
//讓我們看一個打印類加載器名稱的例子
公共類 ClassLoaderExample
{
公共靜態無效 主要(字符串 [] 參數)
{
// 讓我們打印當前類的類加載器名稱。
//Application/System類加載器會加載這個類
類 c=ClassLoaderExample。類;
System.out.println(c.getClassLoader());
//如果我們打印String的類加載器名稱,它會打印null,因為它是一個
//在rt.jar中找到的內置類,因此它由Bootstrap類加載器加載
System.out.println( String.class .getClassLoader ());
}
}
輸出:
sun.misc.Launcher$AppClassLoader@4e0e2f2a
空值
這些是 Java 提供的內部類加載器。如果要創建自己的類加載器,則需要擴展 ClassLoader 類。
2.類(方法)區
Class(Method) 區域存儲每個類的結構,例如運行時常量池、字段和方法數據、方法的代碼。
3.堆
它是分配對象的運行時數據區。
4.堆棧
Java Stack 存儲幀。它保存局部變量和部分結果,并在方法調用和返回中發揮作用。
每個線程都有一個私有 JVM 堆棧,與線程同時創建。
每次調用方法時都會創建一個新框架。框架在其方法調用完成時被銷毀。
5.程序計數器寄存器
PC(程序計數器)寄存器包含當前正在執行的Java虛擬機指令的地址。
6.原生方法棧
它包含應用程序中使用的所有本機方法。
7.執行引擎
它包含了:
虛擬處理器
解釋器:讀取字節碼流然后執行指令。
Just-In-Time(JIT) 編譯器:用于提高性能。JIT 同時編譯具有相似功能的部分字節碼,從而減少編譯所需的時間。這里,術語“編譯器”是指從Java虛擬機(JVM)的指令集到特定CPU的指令集的翻譯器。
8.Java 原生接口
Java Native Interface (JNI) 是一個框架,它提供了一個接口來與用另一種語言(如 C、C++、Assembly 等)編寫的另一個應用程序進行通信。Java 使用 JNI 框架將輸出發送到控制臺或與 OS 庫進行交互。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習