JVM---概述
虚拟机
/**
* 【虚拟机】
* Virtual Machine;
* 虚拟的计算机;
* 一款软件;
*
* 作用:
* 执行一系列虚拟计算机指令;
* 分类:
* 系统虚拟机:
* VMware...;
* 对物理计算机的仿真,提供 一个可运行完整操作系统的软件平台;
* 模拟硬件环境;
*
* 程序虚拟机;
* JVM...;
* 专门为执行单个计算机程序设计;
* 硬件->OS->JVM
*/
概述
/**
* 【JVM-概述】
* 作用:
* JVM就是 二进制字节码 的运行环境;
* JVM负责 load字节码到其内部,解释/编译为 对应平台上的 机器指令执行;
* 特点:
* 一次编译,到处运行;
* 自动内存管理;
* 自动垃圾回收;
*
* 位置:
* 硬件->OS->JVM
*/
整体结构
/**
* 【JVM-整体结构】
* 类加载器子系统
* 运行时数据区
* 执行引擎
*/
架构模型
/**
* 【JVM-架构模型】
* 指令集架构:
* 基于栈的指令集架构;
* 使用 零地址指令 分配;
* 指令集更小,但同样的操作指令多;
* 2+3 字节码指令:
* iconst_2
* istore_1
* iconst_3
* istore_2
* iload_1
* iload_2
* iadd
* istore_0
* 不需要硬件支持,移植性更好;
*
* 基于寄存器的指令集架构;
* 性能优秀、执行高效;
* 指令更少;
* 2+3 寄存器指令:
* mov eax,2
* add eax,3
* 指令集依赖硬件,移植性差;
*
*/
基于栈(Stack-based)的指令集架构:
计算机处理器设计,它依赖于 内存中的数据栈 来存储和检索操作数;
在这种体系结构中,计算任务通常通过一系列对栈的操作来完成;
在基于栈的指令集中,操作数 不会直接出现在指令中,而是 由指令去访问栈顶或者栈中的特定位置来获取;
这样做的优点是可以减少指令长度,并且可以简化编译器的设计,因为编译器不需要关心具体的寄存器分配问题;
零地址指令(Zero Address Instruction):
一种机器指令;
特点:不包含操作数的地址字段。
这意味着在一条指令中,仅包含操作码(Opcode),而没有直接指定的操作数。
这并不意味着指令不需要任何操作数,而是操作数可能以某种隐含的方式提供或通过其他方式来获取 ;
在基于栈的体系结构中,操作数 通常位于内存中的数据栈上;
零地址指令 可以使用栈顶的数据作为操作数,或者执行对栈的操作,如入栈(PUSH)、出栈(POP)等;
生命周期
/**
* 【JVM-生命周期】
* 启动:
* 通过 引导类加载器(bootstrap class loader)创建一个初始类(init class)来完成的,这个初始类 由JVM的具体实现指定;
*
* 执行:
* 一个运行中的JVM有着一个清晰的任务:执行程序;
* 程序 开始执行时 JVM允许,程序结束 JVM结束;
* 执行一个 程序时,其实执行的是 一个JVM进程;
*
* 退出:
* 程序正常结束;
* 程序执行过程中遇到异常或错误终止;
* 由于OS异常导致JVM进程终止;
* 某个线程调用 Runtime 或 System的exit方法;
* ...
*/
HotSpot
/**
* 【JVM-Hotspot】
* Oracle JDK 与 OpenJDK 都默认 Hotspot;
*/
浙公网安备 33010602011771号