JVM 虚拟机 —> JVM 基础概念
一、Java 跨平台
- Java是一种可跨平台的编程语言,我们通常把
CPU
处理器与操作系统构成的计算机系统整体成为叫平台 - 不同的
CPU
,差异主要在底层指令集不同,指令集分为精简指令集(RISC
)和复杂指令集(CISC
)。每个CPU
都有自己的特定指令集
**指令集:**是CPU中用来计算和控制计算机系统的一套指令集合
- 不同的操作系统,支持不同的
CPU
,严格来说,不同的操作系统支持不同的CPU
指令集。例如:早期的Mac
操作系统只支持PowerPC
,不能安装在IntelCPU
上。 - 现在
Windows
、Linux
、MAC
和Solaris
都支持Intel
和AMD CPU
指令集
主要原因
- Java 可以跨平台的主要原因是有 JVM
- 不同的平台,使用不同的 JVM
Java 源代码在编译后会生成一个 Class 文件,称为字节码文件,JVM负责将字节码文件翻译成特定平台下的机器码,然后运行
简单来讲,Java
的跨平台就是因为不同版本的 JVM
。只要在不同的平台上安装相应的JVM,就可以运行字节码文件(.class
)并运行我们编写的Java
程序。
在这个过程中,我们编写的Java
程序没有做任何改动,只是通过JVM
的“中间层”,就可以在不同的平台上运行,真正实现了“一次编译,到处运行(write once,run anywhere)”的目的。
综上所述,JVM
是跨平台的桥梁和中间件,是实现跨平台的关键。首先将Java
代码编译成字节码文件,然后通过JVM
将其翻译成机器语言,从而达到运行Java程序的目的。因此,运行Java
程序必须有JVM
的支持,因为编译的结果不是机器代码,必须在执行前由JVM
再次翻译
注意:编译的结果不是生成机器代码,而是生成字节码。字节码不能直接运行,必须由JVM
转换成机器码。编译生成的字节码在不同的平台上是相同的,但是JVM
翻译的机器码是不同的。
二、JVM 的组成结构
JVM 由 类加载器、运行时数据区、执行引擎组成
三、Java 代码执行流程
四、JVM 的生命周期
JAVA
程序的执行过程简单来说包括:
JAVA
源代码编译成字节码;- 字节码校验并把
JAVA
程序通过类加载器加载到JVM
内存中; - 在加载到内存后针对每个类创建
Class
对象; - 字节码指令和数据初始化到内存中;
- 找到
main
方法,并创建栈帧; - 初始化程序计数器内部的值为
main
方法的内存地址; - 程序计数器不断递增,逐条执行JAVA字节码指令,把指令执行过程的数据存放到操作数栈中(入栈),执行完成后从操作数栈取出后放到局部变量表中,遇到创建对象,则在堆内存中分配一段连续的空间存储对象,栈内存中的局部变量表存放指向堆内存的引用;遇到方法调用则再创建一个栈帧,压到当前栈帧的上面。
本文含有隐藏内容,请 开通VIP 后查看