快速了解JVM
- JVM
- 定义与实质
- 特点与优势
- 结构与组成
- 运行流程
Scala是一门运行在Java虚拟机(JVM)上的编程语言,这意味着它可以无缝地运行在现有的Java环境中,并兼容现有的Java程序,Scala的源代码被编译成Java字节码,因此可以在JVM上运行,并能够调用现有的Java类库
JVM
(Java Virtual Machine),即Java虚拟机,是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现Java程序的运行
定义与实质
JVM是Java的运行环境,它负责将Java字节码转换为特定操作系统上的机器指令,并管理程序的运行时环境
JVM是一种用于计算设备的规范,它定义了一个抽象的机器或处理器,以及相应的指令系统
特点与优势
- 平台无关性
- JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在JVM上运行的目标代码(字节码),就可以在多种平台上不加修改地运行
- 跨平台性
- 任何平台只要装有针对于该平台的JVM,字节码文件(.class)就可以在该平台上运行,实现了“一次编译,多次运行”的特性
- 自动内存管理
- JVM具有自动内存管理机制,如垃圾回收等,减轻了程序员的内存管理负担,并降低了内存泄漏或内存溢出的风险
结构与组成
- 类加载器(ClassLoader)
- 负责查找并加载类文件的字节码,转换成JVM能理解的数据结构,并存储在方法区中
- 运行时数据区(Runtime Data Area)
- 是JVM内存管理的重要部分,JVM在执行Java程序时用于存储数据的主要区域。它包括了方法区(Method Area)、Java堆(Heap)、虚拟机栈(Stack)、程序计数器(Program Counter)和本地方法栈(Native Method Stack)等部分
- 方法区:存储已被加载的类信息、常量、静态变量等数据
- Java堆:存储对象实例,是垃圾回收的主要区域
- 虚拟机栈:存储局部变量表、操作数栈、动态链接、方法出口等信息,是线程私有的
- 程序计数器:存储当前线程执行的字节码行号,是线程私有的,且不会出现OutOfMemoryError
- 本地方法栈:与虚拟机栈类似,但为Native方法服务
- 是JVM内存管理的重要部分,JVM在执行Java程序时用于存储数据的主要区域。它包括了方法区(Method Area)、Java堆(Heap)、虚拟机栈(Stack)、程序计数器(Program Counter)和本地方法栈(Native Method Stack)等部分
- 执行引擎(Execution Engine)
- 也叫解释器,负责解释或编译字节码,执行Java程序,包含解释器、即时编译器(JIT)等组件
- 本地库接口(Native Interface)
- 与native lib(本地方法库)交互,融合其他编程语言为Java所用,它是JVM与其他编程语言交互的接口,允许Java程序调用用其他语言编写的本地方法
运行流程
- 编写Java源代码,并保存为.java文件
- 使用Java编译器(如javac)将.java文件编译成Java字节码,存储在.class文件中
- 当Java程序运行时,JVM通过类加载器加载这些.class文件,并进行链接和初始化
- 加载完成后,JVM将字节码提交给执行引擎进行执行,执行引擎可以通过解释器逐条解释执行字节码,也可以通过即时编译器将部分字节码转换成本地机器码以提高效率