什么是JVM
JVM 即 Java Virtual Machine,中文名為 Java虛擬機,
一般情況下
- C/C++ 程式,編譯成二進制檔案后,就可以直接執行了;
- Java 需要使用 javac 編譯成
.class檔案,還需要使用 Java 命令去主動執行它,JVM 就是識別.class后綴的檔案,并且能夠決議它的指令,最終呼叫作業系統上的函式,
Java 是一門抽象程度特別高的語言,提供了自動記憶體管理等一系列的特性,這些特性直接在作業系統上實作是不太可能的,而且有了 JVM 這個抽象層之后,Java 就可以實作跨平臺了,Java 跨平臺的意義在于一次編譯,處處運行,而C/C++程式則需要對應不同的平臺、架構分別編譯成二進制檔案, 現在的一些 JVM 的擴展語言,比如 Clojure、JRuby、Groovy 等,編譯到最后都是 .class 檔案,Java 語言的維護者,只需要控制好 JVM 這個決議器,就可以將這些擴展語言無縫的運行在 JVM 之上了,
從官網截取幾張圖來理解 JVM:


JVM JRE JDK的關系
JVM不能單獨搞定 class 的執行,它還需要一個基本的類別庫,比如怎么操作檔案、怎么連接網路等,JVM加上這些基礎類別庫,就組成
了 Java 的運行時環境,也就是我們常說的 JRE(Java Runtime Environment),
另外Java的開發者非常慷慨的實作了一些開發的工具,比如 javac、java、jar 等,是 Java 開發的核心,JRE加上這些工具就組成了 JDK(Java Development Kit)),


JVM 分塊概述
- 運行時資料區 (Runtime Data Areas):分為五大區域,方法區(Method Area)、堆(Heap)、虛擬機堆疊(Virtual Machine Stacks)、程式暫存器(Program Counter Registers)、本地方法堆疊(Native Method Stacks)
- 類加載器 (ClassLoader):負責加載程式中的類和介面
- 執行引擎 (Execution Engine):通過類裝載器裝載的,被分配到JVM的運行時資料區的位元組碼會被執行引擎執行
- 垃圾收集 (Garbage Collect): 自動管理記憶體并進行垃圾回收
JVM 的不同實作
廣義上來講,JVM 是一種規范,Java發展的程序中產生了很多 VM 實作,我們現在最常用的 HotSpot VM,
下面表格是目前常見的 JVM 實作
| 虛擬機名稱 | 介紹 |
|---|---|
| HotSpot | Oracle JDK和OpenJDK都使用HotSpot VM的相同核心 |
| JRockit | JRockit 也屬 Oracle,目前為止 Oracle 一直在推進與 HotSpot 融合互補(大致上是在HotSpot的基礎上,移植JRockit的優秀特性) |
| Azul Zulu | 由Azul Systems根據HostPot為基礎改進的高性能低延遲的JVM(最初針對專有硬體Vega系統,2010年發布了Zing VM面向通用x86平臺) |
| OpenJ9 | 是IBM開發的高度模塊化的JVM,目前已經捐獻給Eclipse基金會 |
| GraalVM | 基于HotSpot / OpenJDK,它具有多語言功能,可以透明地混合和匹配支持的語言, |
更多的JVM實作方案請查看 List of Java virtual machines - Wikipedia
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/319564.html
標籤:Java
上一篇:【C++ Primer Plus】編程練習答案——第14章
下一篇:oracle踩坑
