[jvm解析系列][五]类文件结构,魔数,最大最小版本号

2 篇文章 0 订阅

上一会讲完了JVM的内存分配和垃圾回收策略我们该讲一讲如何组织一个class文件了

一个class文件怎么被加载运行的?

我们可以说java的野心很大,早在97年的时候JVM虚拟机规范中就说以后可以支持其他语言,到JDK1.7的时候基本已经实现了,怎么做到的呢?

这是JVM做的语言无关性即JAVA/Scala/JRuby等都可以编译成class文件,对于JVM而言我不管你之前什么文件反正我只要class文件就好了:

 

很明显的,我们这一章就是用来讲解class文件的结构的

这一块比较复杂,我们不做特别详细的讲解,大概了解一下class文件的结构即可

class文件时一组以8字节为基础单位的二进制流,它们中间的数据是按照顺便紧密排列的,也没有用到任何的分隔符,所以规则的理解相当重要。

Class文件格式采用一种类似于C语言的伪结构来存储数据,但是只有两种数据结构,分别是无符号数和表

1、无符号数:

无符号数分别以u1,u2.u4,u8来表示1248个字节,无符号数主要用来描述数字,引用,字符串。

2、表:

表是由无符号数或者其他表作为item的复合的数据结构,这种数据结构是具有层次的(可以类比Java里的list<T>还是带泛形的这种)。于是我们可以说class本身就是一种表,复杂的表,里面包含如下的内容:

虽然画的是烂了点,但是这幅图还是能够表达出一个class的结构,这幅图从左往右,从上往下顺序排列就是class的结构。

在接下来的任务里我们就是一个个的讲解这个大的图。

1、magic魔数

作用:用来确定这个文件是否为一个能被虚拟机接受的Class文件。说白了这个东西的作用跟后缀名.class一样,只是怕你乱改后缀名所以加一个魔数免得你改一个.png成.class去骗他,class文件的魔数为:0xCAFEBABE。

2、minor_version和major_version

作用:确定版本号,minor是次版本号,major是主版本号,Java的版本号从45开始。jdk1.0使用了45.0~45.3之后的每一个版本加一,到jdk1.7的时候版本号是51.0。我截取以前写的类我们来看一看。

我已经给大家划出来了几个部分,怎么样没骗你们吧

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014629433/article/details/51593164

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值