小目标之读懂JVM—类文件结构定义

17 篇文章 0 订阅
13 篇文章 0 订阅

计算机只认识0和1,所有程序需编译成二进制本地机器码才可被计算机识别运行,因为操作系统与机器指令的不一致导致编译代码的不一致。各种虚拟机的出现允许大家将程序编译为与操作系统和机器指令集无关的、平台中立的格式。有力地促进了编程语言的发展。

java提出过一个著名的宣传口号:“一次编写,到处运行”,Sun公司及其他虚拟机提供商发布的不同平台上运行的虚拟机都可以载入同一种平台无关的字节码,从而实现程序的"一次编写,到处运行"。现在的java虚拟机也可以编译Groovy、JRuby、Scala等语言,随着时间的发展,也许Java虚拟机也会成为一种语言无关性的运行环境。虚拟机的平台无关性以及语言相关性的基础均在于虚拟机的字节码存储格式。Java虚拟机并不与包含Java在内的任何语言绑定,它只与“Class 文件”这种特定的二进制文件格式所关联。只要编程语言对应的编译器可以将该语言编译为满足指定格式的Class文件便可被虚拟机识别运行。字节码命令语义描述能力大于Java语言本身。

这章主要是讲解Class类文件的结构。任何一个Class文件都对应着唯一一个类或接口的定义信息,但类和接口并不一定都定义在文件中,也可以通过类加载器直接生成。但是任意一个有效的类或接口均需满足指定的格式即“Class文件格式”。

Class文件是一组以8位字节为基础单位的二进制流,数据项目按照顺序紧凑排列,中间没有空隙存在。当数据项需要占用8位字节以上空间时则按照高位在前的方式存储。Class文件格式按照一种类似于C语言结构体的伪结构存储,包含两种数据类型:无符号数和表。无符号数用1、2、4、8个字节描述数字、索引引用、数量值或者UTF-8的字符串值。表是包含多个无符号数和其他表的符合数据类型。无符号数和表描述同一类型数量不定的多个数据时,会采用一个容量计数器加若干个连续的数据项的形式。比如有5个人,中国人、印度人、印度人、美国人、日本人。    ​

Class文件的各个表的读取解析内容过多,放至下一节讲解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值