JVM : java 虚拟机, 模拟计算机达到计算所具有的计算功能.
包括几个组成部分: 1 指令集 - 计算机识别的机器语言的命令集合
2 计算单元 - 识别并控制指令执行的功能模块
3 寻址方式 - 地址的信息, 运行规则等.
4 寄存器定义 - 包括多种寄存器的定义, 数量和使用方式.
5 存储单元 - 能够存储操作数和保存操作结构的单元. 比如: 内存和磁盘.
以上五个部分和代码关联最密切的是指令集部分.
指令集:
在 CPU 中用来计算和控制计算机系统的一套指令的集合. 是体现 CPU 性能的一个重要指标.
主流的有精简指令集和复杂指令集. 通常使用的是复杂指令集.
指令集和汇编语言的关系?
指令集是可以直接被机器识别的机器码, 以二进制格式存在于计算机中.
汇编语言是可以被人识别的语言, 在顺序和逻辑上与机器指令一一对应.
也即是说, 汇编语言是为了让人记住机器指令的助记符.
指令集和 CPU 架构有关系?
汇编语言是对寄存器和段的直接操作的命令, 而寄存器和段是架构的一部分,
所以不同的架构对应相应的指令集. 由于操作系 统是管理计算机的真正入口,
如果操作系统不支持某种芯片的指令集, 程序无法执行. CPU 要适用于相应的指令集, 匹配操作系统.
JVM 和实体机的区别?
一个抽象的规范. 官方的规范约束了 JVM.
一个具体的实现. 不同的厂商根据这个抽象规范用软件或者软硬件结合的方式在相同或者不同的平台上的具体的实现.
一个运行的实例. 运行一个 java 程序时, 它就是一个运行中的实例, 每个运行中 java 程序就是一个 jvm 实例.
jvm 也有自己的指令集, 称为 jvm 字节码指令集. 符合 class 文件规范的字节码都可以被 jvm 执行.
JVM 体系结构
类加载器 : 在 jvm 启动时或在类运行时将需要的 class 加载到 JVM 中. 每个被 JVM 装载的类型都有一个对应的 java.lang.Class 类
的实例来表示该类型, 该实例可以唯一表示被 JVM 装载的 class 类, 要求这个实例和其他类的实例一样都存在 java 堆中.
执行引擎 : 执行引擎的任务是负责执行 class 文件中包含的字节码指令, 相当于实际机器上的 CPU . 执行引擎是 jvm 的核心部分, 执行引擎的作用就是解析 jvm 字节码指令, 得到执行的结果. 执行引擎具体采取什么方式由 jvm 的实现厂家实现. 有直接解释执行, 采用 JIT 技术转成本地代码执行, 采用寄存器芯片模式执行等方法, sun 的 hotspot 是基于栈的执行引擎. 实质上执行引擎执行的是方法体内的代码, 是代码的执行流程, 对应的就是 java 中的线程, 所以也可以说 java 线程是执行引擎的实例.
内存区: 将内存区划分成不同的模块. 一个 jvm 实例会包括: 方法区, java 堆, java 栈, pc 寄存器和本地方法区.
方法区和 java 堆是所有线程共享的,
本地解
来源: https://www.2cto.com/kf/201905/808451.html