jvm体系结构概述_JVM体系结构:JVM和JVM体系结构概述
jvm體系結構概述
各位讀者好! 在本教程中,我們將了解和學習Java虛擬機(JVM)及其體系結構。 本教程將幫助您正確回答以下問題:
- Java中的JVM是什么?
- JVM的不同組件
- JVM,JRE和JDK之間的區別
1.簡介
Java虛擬機(JVM)是??駐留在您的計算機上的抽象虛擬機,并為Java字節碼提供了運行時執行環境。 JVM可用于許多硬件和軟件平臺,但是很少有Java開發人員知道Java運行時環境 (JRE)是Java虛擬機 (JVM)的制定。 JVM分析字節碼,對其進行解釋,然后執行相同的字節碼以顯示輸出。
JVM的基本功能是執行已編譯的.class文件(即字節碼)并生成輸出。 請注意 ,每個操作系統都有不同的JVM,但是在所有操作系統上生成的字節碼輸出都是相同的。 這意味著在Windows操作系統上生成的字節碼也可以在Linux操作系統上運行,反之亦然,從而使Java成為獨立于平臺的語言。
圖1:Java虛擬機概述
1.1 JVM做什么?
Java虛擬機執行以下操作:
- 加載所需的.class和jar文件
圖2:JVM組件
1.2 Java虛擬機的類型
Java版本具有Java虛擬機(JVM)的兩種不同實現,即
- Java Hotspot Client VM :這是JDK 2.0運行時環境的默認虛擬機,并且通過減少應用程序啟動時間和內存占用量進行了調整,以在客戶端環境中運行應用程序時獲得最佳性能。
- Java Hotspot Server VM :此虛擬機旨在提高程序執行速度,以便在服務器環境中運行應用程序。 通過使用服務器命令行選項來調用此虛擬機
1.3 JVM的內部架構
該圖顯示了符合JVM規范的Java虛擬機的關鍵內部組件。
圖3:Java虛擬機架構
下面說明圖3中所示的組件。
1.3.1類加載器
類加載器子系統用于加載/讀取.class文件,并將字節碼保存在JVM方法區域中。 該子系統執行三個主要功能,即:
- 加載 :此組件處理類的加載
- 鏈接 :此組件將驗證生成的字節碼并分配引用
- 初始化 :此組件將為靜態變量分配其原始值并執行靜態塊
1.3.2運行時數據區
該子系統分為五個主要部分,即
- 方法區域 :此組件保存每個.class文件的類級別數據,例如元數據,常量運行時池,靜態變量,方法的代碼等。每個JVM只有一個方法區域,并且在所有類之間共享
- 堆區 :此組件是JVM內存的一部分,所有對象及其對應的實例變量和數組都存儲在JVM內存中。 只有一個堆區域,并且在多個線程之間共享,因為該區域中存儲的數據不是線程安全的
- 堆棧區 :該組件還是JVM內存的一部分,所有臨時變量都存儲在該內存中。 該區域具有堆棧幀,并為每個線程分配一個幀。 隨著線程執行的完成,相應的幀也會被破壞。 堆棧區域是線程安全的,因為它不是共享資源,并且分為三個子實體,例如:
- 局部變量數組
該區域在方法調用和返回期間起著重要作用。
- PC(程序計數器)寄存器 :該組件保存當前正在執行的JVM指令的地址。 Java中的每個線程都有其自己的PC寄存器,以保存當前正在執行的指令的地址
- 本機方法堆棧 :此組件用另一種語言編寫,并包含本機方法信息。 Java中的每個線程都有一個單獨的本機方法堆棧
1.3.3執行引擎
該組件執行分配給運行時數據區域的字節碼,并具有三個主要子組件,即:
- 解釋器 :此組件讀取字節碼指令并以順序方式執行它們
- JIT(即時)編譯器 :該組件抵消了解釋器執行緩慢的缺點,并提高了性能。 JIT編譯器同時編譯字節碼的相似部分,從而減少了編譯所需的總時間。 該組件中的編譯器是指將JVM指令集轉換為特定于OS的指令集的轉換器
- 垃圾收集 :此組件是執行引擎的一部分,該引擎通過收集和刪除未引用的對象來釋放內存
圖4:JVM中的執行引擎
1.3.4本機方法接口(JNI)
該組件是一個編程框架,允許Java代碼調用庫或本機應用程序(即特定于系統的硬件和OS的程序)或由其調用。
1.3.5本機方法庫
該組件是執行引擎所需的本機C,C ++庫的集合。
1.4 JVM與JRE與JDK
JDK,JRE和JVM是Java編程的三個重要關鍵字,許多開發人員未能將二者區分開。
- Java虛擬機(JVM) :JVM是一種虛擬機,為執行Java字節碼提供了運行時環境
- Java運行時環境(JRE) :JRE是一個在其中運行JVM的環境,并具有Java虛擬機在執行時使用的類庫和其他文件。 換句話說,JRE = Java虛擬機(JVM)+運行該應用程序的庫
- Java開發工具包(JDK) :JDK是JRE的父集,具有JRE包含的所有內容以及開發工具,例如編譯器,調試器等。換句話說,JDK = Java運行時環境(JRE)+開發工具
這是JVM,JRE和JDK的圖形表示。
圖5:JVM,JRE和JDK表示形式
1.5如何編譯和執行Java類?
本節將演示Java類的編譯和執行 。 讓我們借助示例代碼片段來了解此過程。
1.5.1創建Java文件
打開操作系統命令提示符,我們將使用“記事本”創建一個簡單的Java類。 可以使用以下Java命令。
> notepad _sample_file_name_with_extension_該命令提供以下輸出。
圖6:使用記事本創建Java文件
1.5.2編寫示例Java代碼
如圖6所示,該命令將打開一個記事本 ,開發人員可以將示例代碼添加到顯示虛擬輸出的Welcome.java文件中。 示例代碼如圖7所示, 成功執行后將顯示問候消息。
圖7:添加示例代碼
1.5.3編譯Java類
將代碼保存在Welcome.java文件中后,開發人員將需要對其進行編譯 。 該編譯將生成Welcome.class文件,該文件又將生成.class文件。 要編譯該文件,可以使用以下Java命令。
> javac _Java_file_name_with_extension_該命令提供以下輸出。
圖8:編譯文件
1.5.4執行Java類
現在,開發人員將需要執行生成的Welcome.class文件以顯示輸出。 要執行該文件,可以使用以下Java命令。
> java _Compiled_file_name_with_extension_該命令提供以下輸出。
圖9:執行文件
這就是這篇文章的全部內容。 學習愉快!
2.結論
在本教程中,我們對Java虛擬機(JVM)及其核心組件進行了概述。 本教程可以總結為:
- JVM是執行Java代碼并通過將Java字節碼轉換為機器語言來產生輸出的虛擬機
- JIT編譯器是JVM的子組件,用于加快性能和執行時間
- Java的執行速度很慢 ,原因是:
- 動態鏈接
但是,新的Java Development Kit( JDK )版本在一定程度上解決了這些瓶頸性能問題。 開發人員可以在“ 下載”部分中下載示例代碼片段。
3.下載源代碼
這是Java虛擬機(JVM)及其核心組件的概述教程。
下載您可以在此處下載本教程的源代碼: JVM_Example
翻譯自: https://www.javacodegeeks.com/2018/04/jvm-architecture-overview-of-jvm-and-jvm-architecture.html
jvm體系結構概述
總結
以上是生活随笔為你收集整理的jvm体系结构概述_JVM体系结构:JVM和JVM体系结构概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络外部性名词解释 网络外部性介绍
- 下一篇: aws lambda_跑来跑去:假人与A