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;
     */

  

posted on 2022-03-24 16:58  anpeiyong  阅读(9)  评论(0编辑  收藏  举报

导航