JVM-1(JVM概述)
1.1 📚 概述
📖 定义
Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/便于为对应平台上的机器指令执行。
🌠 特点
- 一次编译,到处运行
- 自动内存管理
- 垃圾自动回收
graph TD
A[Java程序]
B[字节码文件]
C[Win版JVM]
D[Linux版JVM]
E[Ma版JVM]
A --> B
B --> C
B --> D
B --> E
🕵️ Java代码的执行流程

🔰 拓展
Java虚拟机不仅仅能用来解释Java语言。
JVM根本不关心运行在其内部的程序到底是何种语言编写的,它只关心“字节码”文件。
即JVM具有语言无关性,并不会单纯地与Java语言终身绑定,只要其他编程语言的编译结果满足并包含JVM的内部指令集、符号表以及其他的辅助信息,它就是一个有效的字节码文件,能够被JVM所识别、装载并运行。
Java并不是最强大的语言,但JVM是最强大的虚拟机。
graph TD
A1((Kotlin))
B1((Clojure))
C1((Groovy))
D1((Scala))
E1((Jython))
F1((JRuby))
G1((JavaScript))
A2[编译器]
B2[编译器]
C2[编译器]
D2[编译器]
E2[编译器]
F2[编译器]
G2[编译器]
H[字节码文件]
I[Java虚拟机]
A1 --> A2
B1 --> B2
C1 --> C2
D1 --> D2
E1 --> E2
F1 --> F2
G1 --> G2
A2 --> H
B2 --> H
C2 --> H
D2 --> H
E2 --> H
F2 --> H
G2 --> H
H --> I
1.2 📂 结构
📘 说明
- HotSpot VM是目前市面上高性能虚拟机的代表作之一
- 它采用解释器与即时编译器并存的架构
📷 JVM架构图

1.3 ⏳ 生命周期
🎏 虚拟机的启动
Java虚拟机的启动是通过引导类加载器(Bootstrap Class Loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。
🎏 虚拟机的执行
- 一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序
- 程序开始执行时他才运行,程序结束时他就停止
- 执行一个所谓的Java程序的时候,真真正正在执行的是一个叫做Java虚拟机的进程
🎏 虚拟机的退出
- 程序正常执行结束
- 程序在执行过程中遇到了异常或错误而异常终止
- 由于操作系统出现错误而导致Java虚拟机进程终止
- 某线程调用Runtime类或System类的exit方法,或Runtime类的halt方法,并且Java安全管理器也允许这次exit或halt操作
- 除此之外,JNI规范描述了用JNI Invocation API来加载或卸载Java虚拟机时,Java虚拟机的退出情况。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自炒菜K殿下!
评论