JVM簡明筆記1:JVM 概述


什么是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:

An overview of the software development process.

Through the Java VM, the same application is capable of running on multiple platforms.

JVM JRE JDK的關系

JVM不能單獨搞定 class 的執行,它還需要一個基本的類庫,比如怎么操作文件、怎么連接網絡等。JVM加上這些基礎類庫,就組成
了 Java 的運行時環境,也就是我們常說的 JRE(Java Runtime Environment)。

另外Java的開發者非常慷慨的實現了一些開發的工具,比如 javac、java、jar 等,是 Java 開發的核心。JRE加上這些工具就組成了 JDK(Java Development Kit))。

JVM-JRE-JDK

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM