【0】README

0.1)本文总结于 Clas字节码文件,旨在理清 Class字节码文件的大体结构;

【1】干货开始

对上图的分析(Analysis):
A1)offset=0
  • A1.1)头四个字节为CAFEBABE:表示魔数;
  • A1.2)第5、6个字节是0x0:表示Class文件的次版本号;
  • A1.3)第7、8个字节是0x34:表示主版本号;
  • A1.4)第9、10个字节是0x13=19:表示常量池中常量个数,不过编号0不使用,故实际上只有18个常量;
  • A1.5)第11~15个字节是(0x0A 0x04 0x0F):分别表示常量池中常量标志(类型标志),查表6-3知,其类型是 CONSTANT_Methodred_info,且查表6-6知,后面是index=0x04(2个字节)和index=0x0F(2个字节),前者指向声明方法的类描述符 CONTSTANT_Class_info的索引项(#4),查表6-4知,CONTSTANT_Class_info=(tag,name_index);后者指向名称及类型描述符CONSTANT_NameAndType 索引项(#15),继续查表;
  • A1.6)第16个字节=0x09,又是常量标志,查表6-3知,表示 CONSTANT_Fieldref_info(字段的符号引用),继续查表。。。这样的常量有18个,我们到了0xB0行;
A2)offset=0xB0,存储类索引+父类索引+接口索引
  • A2.1)第1、2个字节是0x03:表示类索引(#3);
  • A2.2)第3、4个字节是0x04:表示父类索引(#4);
  • A2.3)第5、6个字节是0x00:表示接口索引(#0,表示没有实现任何接口);
A3)offset=0xB6(查表6-8),存储字段信息
  • A3.1)第1、2个字节是0x01:表示字段个数;
  • A3.2)第3、4个字节是0x02:查表6-9知,字段访问标志是ACC_PRIVATE;
  • A3.3)第5、6个字节是0x05:表示name_index(字段名称索引)=#5,(m);
  • A3.4)第7、8个字节是0x06:表示desc_index(字段描述符索引)=#6(I==Int);(干货——所以到这里,我们就可以推断出源代码定义的字段为 private int m);
  • A3.5)第9、10个字节是0x00,0x00:属性个数和属性表均为0;
A4)offset=0xC0,存储方法信息(查表6-11)

  • A4.1)第1、2个字节是0x02:表示方法数量;
  • A4.2)第3、4个字节是0x01:查表6-12知,方法访问标志为public;
  • A4.3)第5、6个字节是0x07:表示方法名称索引=#7=<init>(干货——实例构造器为<init>方法);
  • A4.4)第7、8个字节是0x08:表示方法描述符索引=#8=<>V;
  • A4.5)第9、10个字节是0x01:表示属性数量=1;
  • A4.6)第11、12个字节是0x09:表示属性信息索引=$9=Code;
  • A4.7)第13、14个字节是0x00:表示属性个数;
  • A4.7)第15、16个字节是0x0D:......;
A5)offset=0xD0,存储Code属性的信息,如下图所示:


A6)后面我偷个懒,还有一些属性的字节码表示:刚刚介绍了Code属性,接下来是 Exceptions属性,LineNumberTable属性,LocalVariableTable属性,SourceFile属性, ConstantValue属性, InnerClass属性, Deprecated和Synthetic属性,StackMapTable属性,Signature属性,和 BootstrapMethods 属性等, 它们的截图示例如下:

Conconsion)总结下Class字节码文件格式的大致结构(排名分先后)(非常重要):
  • 1)Class文件标识符——魔数(CAFEBABY);
  • 2)Class文件的次版本号+主版本号;
  • 3)常量池(常量个数,(常量类型标志 ,常量值索引)* )
  • 4)类索引+父类索引+接口索引;
  • 5)字段表集合:字段个数,访问标志,字段名称索引,字段类型描述符索引等;
  • 6)方法表集合:方法个数,访问标志,方法名称索引,方法类型描述符索引,属性表集合等;
  • 7)属性表集合:这里的属性并不是类中的属性,字节码文件结构中的属性在本文文末有图所示(我只举了部分属性荔枝,详见java类文件结构(字节码文件)中的表6-13):
    • 7.1)重要的属性集合有:Code属性,Exceptions属性,LineNumberTable属性,LocalVariableTable属性,SourceFile属性, ConstantValue属性, InnerClass属性, Deprecated和Synthetic属性,StackMapTable属性,Signature属性,和 BootstrapMethods 属性等;(它们的截图示例如A6所示)

jvm(6)-Class字节码文件结构总结相关推荐

  1. jvm原理(25)Java字节码文件结构剖析

    编写java文件: public class MyTest1 {private int a = 1;public int getA() {return a;}public void setA(int ...

  2. 1 字节的 utf-8 序列的字节 1 无效_字节码文件结构详解

    点击上方" Java资料站 ",选择"标星公众号" 优质文章,第一时间送达 陈建源  |  作者 urlify.cn/INFrUr  |  来源 "一 ...

  3. java字节码文件结构解析

    目录 魔数与版本 常量池 类.父类和接口索引集合 字段表集合 方法表集合 属性表集合 Class文件(即字节码文件)以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列, 中间没有分隔符 ...

  4. 尚硅谷 宋红康 JVM教程_02_字节码与类的加载篇

    本系列相关链接 尚硅谷 宋红康 JVM教程_01_内存与垃圾回收篇--01 (20210103-20210110) https://blog.csdn.net/wei198621/article/de ...

  5. JVM中篇:字节码与类的加载篇

    0.概述 0.1字节码文件的跨平台性 0.1.1.Java语言:跨平台的语言(write once,run anywhere) 当]ava源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再 ...

  6. fedora 不在sudoers文件中_Spring AOP中还有你不知道的JVM Class文件字节码转换知识!...

    引言 众所周知,一旦提到AOP,相信大家都是条件反射的想到JDK代理和CGLib代理,没错,这两个代理都是在运行时内存中临时生成代理类,故而又称作运行时增强--动态代理.世间万物都不是绝对的,既然有动 ...

  7. 【初级01】java JVM核心技术(1):字节码、类加载器、GC机制

    1.编程语言概述 编程语言有不同的分类方法: 面向过程.面向对象.面向函数 静态类型.动态类型 编译执行.解释执行 有虚拟机.无虚拟机 有GC.无GC Java语言是一种面向对象.静态类型.编译执行, ...

  8. Java的 Class字节码文件结构和内容全面解析【两万字】

    了解Class文件的结构组成,对于我们后续的JVM以及Java原理深入学习是很有帮助的,因为Class文件帮我们默默的做了很多事,比如.为什么对象方法中可以直接使用this变量?!本文将带领大家,一步 ...

  9. JVM类加载与字节码技术

    文章目录 类加载与字节码技术 1.类文件结构 1.1.概述 1.2.无关性的基石 1.3.Class类文件结构 1.3.1.魔数magic 1.3.2.版本version 1.3.3.常量池const ...

最新文章

  1. Windows环境下32位汇编程序设计C版code--第四章
  2. 深度学习:人脸识别学习笔记
  3. 每台计算机需要配置网关吗,每台计算机的IP地址和网关以及子网掩码的设置有哪些规律或者规则吗?...
  4. 转 php 观察者模式
  5. YMP框架学习笔记(二)------基于YMP框架搭建WEB应用程序
  6. Windows10最新MySQL8.0.23安装教程(超级详细)
  7. rust异步之async、await、future
  8. 《深度学习笔记》——在训练过程中出现nan的调试笔记
  9. 浮点数 字符串 java_Java如何将浮点数转换为字符串
  10. 多标签图像分类任务的评价方法——mAP
  11. 我把视频变成链接_H5中加视频?这才是正确姿势
  12. Python如何配置清华镜像源
  13. 创建table表格总有一些线比其他线粗
  14. 三十岁的男人应该有多少存款?
  15. 水浒108将(按出场顺序)
  16. Java毕业设计_基于javaee创新创业实验室管理系统
  17. 【转】在网页中嵌入QQ 阿里旺旺 淘宝代码及详解
  18. linux 445端口连不上,Linux配置防火墙,开启访问端口
  19. C#中悲观锁和乐观锁
  20. 设置打印html页面大小,A4纸网页打印 html网页页面的宽度设置成多少

热门文章

  1. CF662C Binary Table(FWT_XOR卷积)
  2. jzoj1764-游戏【dp,dfs】
  3. JoyOI(TYVJ)1061-Mobile Service【线性dp】
  4. ssl初一组周六模拟赛【2018.4.21】
  5. codeforces1553 F. Pairwise Modulo(数学)
  6. 牛客练习赛 60(待补E-长链剖分或者dsu)
  7. 【背包】逃亡的准备 (ssl 1236)
  8. 12、java中的I/O流(2)
  9. Hadoop生态hive(三)Hive QL介绍
  10. jar包天天见,可是你知道它的运行机制吗