2020-11-08

Java 虚拟机

Java 虚拟机使得 Java 的平台无关性成为可能。一般的高级语言必须将程序编译成与平台相对应的目标代码,对于不同的平台需要编译成不同的目标代码。而 Java 只需将 Java 程序编译成 Java 字节码,然后在虚拟机上完成从字节码到机器指令的转换。
注意: ** Java 虚拟机是 Java 程序的底层基础,在学习 Java 语言之前对 Java 虚拟机有一个大体了解,有助于理解 Java 语言的一些特性,也有助于学习 Java程序设计知识。**

Java 虚拟机支持的 Java 语言的基本数据类型如下。
  • byte:1 字节。
  • short:2 字节。
  • int:4 字节。
  • long:8 字节。
  • float:4 字节。
  • double:8 字节。
  • char:2 字节。
    Java 虚拟机并没有给 boolean 类型指定单独的操作指令,boolean 类型数据用 Integer 指令完成,boolean 类型数组由 byte 数组处理。
    注意: 在 Java 中,数组被作为对象引用来处理。
Java 虚拟机的生命周期

Java 虚拟机具有明确的生命周期:当执行 Java 程序时,Java 虚拟机就开始运行;当程序结束时,Java 虚拟机也就停止运行。同一台计算机每多执行一个 Java 程序,就会多运行一个 Java 虚拟机。**Java 虚拟机从 Java 程序的 main() 方法开始执行这个程序,main() 方法被称为 Java 程序的主方法。**该方法是共有的、返回类型为 void 、参数为一个字符串数组的方法。main() 方法是程序运行的起点,被执行的程序初始化为程序初始化线程,程序内部的其他线程都是由它启动的。

Java虚拟机的体系结构

Java 虚拟机由 5 部分组成:方法区、堆、Java 栈、寄存器和指令集。这 5 部分从逻辑上对 Java 虚拟机进行划分,它虽然不依据具体的实现技术,但在功能上必须符合要求,如下图所示:
Java 虚拟机的体系结构

1.指令集

Java 虚拟机大约有 248 个字节码,每个字节码用来执行一种基本的 CPU 运算。Java 指令集等同于 Java程序的汇编语言。

2.寄存器

Java 虚拟机的寄存器用来保存运行状态,它与微处理器的专用寄存器相似。Java 虚拟机的寄存器包括以下 4 种。

  • pc: 计数器。
  • optop: 操作数栈顶指针。
  • frame: 指向当前执行方法所在环境的指针。
  • vars: 指向当前执行方法使用的局部变量中的第一个变量指针。
3. Java 栈

Java 虚拟机是栈结构,Java 栈是 Java 虚拟机存储信息的主要方式。当 Java 虚拟机得到一个 Java 字节码的应用程序后,就会为该程序的每一个类的每一个方法创建一个栈区域,用于保存方法的状态信息。Java 虚拟机的栈区域有 3 种:局部变量区、运行环境区和操作数区。

  • 局部变量区 用于保存这个类的所有方法用到的局部变量。而 vars 寄存器指向局部变量区域的变量表的第一个局部变量。
  • 运行环境区 用于存储解释器对 Java 字节码解释时需要的信息。这些信息包括上次调用方法、局部变量指针、操作数栈的栈顶和栈底指针。
  • 操作数区 用于存储运算所需的操作数及运算的结果。
4. 堆

Java 类的实例对象所需的空间被分配到堆上,解释器负责为类实例对象分配空间。当解释器为一个类实例对象分配空间之后,便对该实例内存空间的使用进行记录,如果对象已经使用完毕,则将它回收到堆中。

在 Java 语言中,使用 new 语句完成对 Java 对象的内存分配,而具体对内存的释放完全由 Java 系统自己完成。Java 系统的设计者也可以设计自己的垃圾回收方法。在 Sun 公司开发的 Java 解释器和 Hot Java 环境中,垃圾回收由后台线程完成。这种垃圾回收方式不但提高了系统的运行效率,而且预防了程序员操作内存带来的风险。

5. 方法区

Java 方法区用于存储 Java 方法的字节码。对于方法区的具体实现方式并没有在 Java 虚拟机规范中规定,这样 Java 应用程序方法区的布局便可在运行过程中确定,因此对平台具有依赖性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值