第一章 JVM 概述

第一章 JVM 概述
第二章 JVM 编译
第三章 JVM 类结构
第四章 JVM 类加载机制



1. Java 虚拟机的概述

Java 虚拟机是 Java 平台的基石。Java 虚拟机是一个抽象的计算机,有指令集并在运行时操作各种内存区域。 Java 虚拟机技术解决了硬件和操作系统独立性、编译后代码小、以及保护用户安全的问题。Java 虚拟机不了解 Java 语言,只知道特定的 class 文件格式,该 class 文件包含 Java 虚拟机指令、符号表以及其它辅助信息。为了安全,虚拟机对 class 文件的格式和语法有很强的校验。然而任意编程语言如果可以编译并用 class 文件表示其功能,其语言就可以使用 JVM 作为它们的交付工具。

2. Java 虚拟机结构

Java 虚拟机结构在 Java 虚拟机规范中最重要的两个部分是类文件格式和指令集。

2.1 类文件格式

类文件格式是 JVM 结构中最重要的部分,上承编程语言,下接虚拟机,是编程语言和虚拟机交互的接口。它里面保存了 JVM 在执行过程中需要用到的类、接口、方法、字段、常量池、指令等信息。

2.2 数据类型和值

用于类文件格式中描述方法参数以及变量声明以及赋值,有原始类型和引用类型。

2.3 运行时数据区域

在这里插入图片描述

2.3.1 程序计数器寄存器

线程启动的时候创建,存储虚拟机当前执行的指令的地址,如果执行的是本地方法,值为 undefiend.

2.3.2 Java 虚拟机栈

线程启动的时候创建,存储栈桢,用来推入和弹出栈桢。

2.3.2.1 栈桢

线程每执行一个方法创建一个栈桢,用来存储数据和部分结果,动态链接,返回结果和分发异常。

2.3.2.1.1 本地变量

存储当前方法的局部变量,包含传入的参数。

2.3.2.1.1 操作数栈

保存指令操作数据的栈结构。

2.3.2.1.1 指向当前方法运行时常量的引用

把等号引用解析成直接引用,即计算当前存储信息的内存偏移量。

2.3.3 本地方法栈

线程启动的时候创建,存储本地方法非 java 语言编写的方法的信息。

2.3.4 方法区

用来存放每个类和每个接口的信息,包含运行时常量池、方法、字段、构造方法以及特殊的初始化方法信息。

2.3.4.1 运行时常量池

字节码中的常量池的运行时呈现,包含编译时的数字常量以及需要运行时解析的字段和方法引用。

2.3.4.2 字段和方法信息

字段信息,方法信息。

2.3.4.3 构造方法

类和实例的构造方法。

2.3.5 堆

JVM 启动的时候创建,存储类实例信息以及数组,被所有线程共享。

2.4 指令集

指令集由1个 Byte 的操作符和0或者多个的操作数构成。所有的指令的集合就构成了虚拟机支持的功能列表。虚拟机在执行的时候会先计算当前要执行的是哪个指令,并存储在 PC Registers 中,然后从这个地址获取这条指令,从栈桢中获取指令的操作数,解释执行当前指令,执行完后再计算下一个要执行的指令地址。同时虚拟机也支持 JIT 编译执行,先将 JVM 指令编译成机器代码并存储在方法区的代码缓存中以供后续执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值