Java深入|JVM之类文件结构

类文件结构

文章目录

1)平台无关性、语言无关性
2)Class类文件结构
3)字节码指令


概述
  • 平台无关性、语言无关性实现一次编写,到处运行
    • 各种不同平台的虚拟机与所有平台都使用统一的程序存储格式—— 字节码,这是构成平台无关性的基石,而实现语言无关性的基础仍然是虚拟机和字节码存储格式
  • Java 源代码首先需要使用 Javac 编译器编译成 .class 文件,然后由 JVM 执行 .class 文件,从而程序开始运行。
  • Java虚拟机只和存储字节码的Class文件这种特定的二进制文件格式关联,且并不关心Class的来源是何种语言
Class类文件结构
  • Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在Class文件之中,中间没有添加任何分隔符。
  • Class文件格式采用一种类似C语言结构体的伪结构来存储数据,这种伪结构中只有两种数据类型:无符号数和表
  • 在这里插入图片描述
  • magic number:每个Class文件的头4个字节
    • 判断该文件是否为一个能被虚拟机接受的Class文件
  • 版本号
    • 包含主版本号(Major Version)和一系列次版本号(Minor Version)
    • 次版本号 第5和第6个字节
    • 主版本号 第7和第8个字节
    • 判断该文件是否在虚拟机处理的有效范围内
  • 常量池
    • 使用一个前置的容量计数器加上若干个连续的常量项
    • 存放着两大类常量:字面量和符号引用
  • 访问标志(access_flags)
    • 常量池结束后两个字节
    • 识别一些类或接口层次的访问信息
  • 类索引、父类索引与接口索引集合
    • 通过这三项数据来确定这个类的继承关系
  • 字段表集合
    • 用于描述借口或者类中声明的变量
    • access_flags、name_index、description_index
  • 方法表集合
    • 用于描述接口或者类中声明的方法
  • 属性表集合
    • 用于描述某些场景专有的信息,在字段表、方法表等都携带自己的属性表集合
字节码指令
  • 由一个字节长度的表示某种特定含义的操作(**操作码)**和零至多个代表此操作所需的参数(操作数)构成
  • 并非每种数据类型和每一种操作都有对应的指令,有些单独的指令可以在必要的时候用来将一些不支持的类型转换为可被支持的类型
  • 分类
    • 加载和存储指令
    • 运算指令
    • 类型转换指令
    • 对象创建与访问指令
    • 操作数栈管理指令
    • 控制转移指令
    • 方法调用和返回指令
    • 异常处理指令
    • 同步指令

参考

《深入理解Java虚拟机》
类文件结构
理解JVM之类文件结构

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值