目录
JVM 的简介
Java Virtual Machine(Java虚拟机)
JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
虚拟机介绍: 通过软件模拟的具有完整硬件的功能, 运行在一个完全隔离的环境中的完整计算机系统.
常见的虚拟机: JVM, VMwave, Virtual Box.....
JVM 与其他两个虚拟机之间的区别:
- VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器;
- JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进
行了裁剪。
JVM 的初心: 就是为了让 Java 程序员能够比较简单的, 感知不到 系统层面的一些内容 还可以说让程序员只关注业务逻辑, 不要关注底层的实现细节 |
JVM 执行流程
JVM 是 java 运行的基础, 也是实现一次编译到处运行的关键, 下面就来说说 JVM 是怎么执行的~
以下是JVM详细的执行流程:
程序在执行之前先要把 java 代码转换为字节码 (class 文件), JVM 首先需要把字节码通过一定的方式类加载器(类加载器 ClassLoad) 把文件加载到内存中 运行中 运行是数据区 (Runtime Data Area), 而字节码文件是 JVM 的一套指令集规范, 并不能直接交给底层操作系统去执行, 云溪需要特定的命令解释器执行引擎 (Execution Engine) 将字节码翻译成底层系统指令再交由 CPU 去执行, 而这个过程中需要顶哦用其他语言的接口 本地库接口 (Native Interface) 来实现整个程序的功能, 这就是这四个只要组成部分的职责和功能
主要是四个部分来执行 java 程序的 :
- 类加载器 (ClassLoader)
- 运行时数据区 (Runtime Data Area)
- 执行引擎 (Execution Engine)
- 本地库接口 (Native Interface)
JVM 运行时数据区
- JVM 运行时数据区域也叫作内存布局, 和 java 内存模型 (Java Memory Model, 简称 JMM) 完全不同
- JVM 就是一个 Java 进程, Java 进程会从操作系统这里申请一大块区域, 给 Java 代码使用进一步划分, 给出不同的用途
由五部分组成
1. 堆: new 出来的对象 (成员变量)
堆的作用: 程序中创建的所有对象都保存在堆中
堆中分为两个区域:
1. 新生代: 放新建的对象
2. 老生代: 当经过一定 GC 次数之后还存活的对象会放入老生代
2. 栈: 维护方法之间的调用关系 (局部变量)(两个栈放到了一起)
- Java 虚拟机栈 : Java 虚拟机栈的生命周期和线程相同,Java 虚拟机栈描述的是 Java 方法执行的
内存模型:每个方法在执行的同时都会创建一个栈帧(Stack