Java类文件结构笔记

12 篇文章 0 订阅

概述

  • 一次编写,处处运行(Write Once, Run Anywhere).

  • 各种平台的虚拟机与所有平台都统一使用的程序存储格式-字节码(ByteCode).

  • Java虚拟机不和包括Java在内任何语言绑定,它只与Class文件锁关联.因此Groovy,JRuby,Jython,Scala都可以在Java虚拟机上运行.

Class类文件结构

Class文件是一组以8字节为基础单位的二进制流,中间没有任何空隙和分隔符.

1.魔数

前4个字节表示魔数0xCAFEBABE

2.版本号

接下来是4个字节,前2个字节是次版本号,后2个字节是主版本号

3.常量池
  • 存在两大常量:字面量(literal)和符号引号(Symbolic References).

  • 常量池中每一项常量都是一个表.

4. 访问标志

常量池紧接两个字节代表访问标志(access_flags),识别是类、接口、public类型、abstract类型、final类型。

5.类索引、父类索引与接口索引集合

类索引、父类索引与接口索引都是u2类型数据,索引对应常量池项,这三项确定类的继承关系。

6.字段表集合

字段表用于描述类或接口声明的变量。

7.方法表的集合

字段表用于描述方法。

8.属性表集合
  • code属性

javac编译后变成字节码指令存储在code属性中。包括操作数栈max_stack和存储空间max_locals。其中max_locals的单位是slot。slot是虚拟机为局部变量分配内存的最小大小。对应32位数据来说,每个局部变量占用1个slot,64位的占有2个slot。

  • Signature属性

记录泛型类型。

  • Exception属性

  • ConstantValue属性

  • SourceFile属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值