读书笔记-深入理解Java虚拟机#4

一、Class类文件的结构

  • Class文件是一组以8位字节为基础单位的二进制流。
  • Class文件格式采用C语音结构体的伪结构来存储数据,伪结构中只有两种数据类型:无符号数和表。
    1. 无符号数属于基本数据类型,用来描述数字、索引引用,数量值或者按UTF-8编码构成的字符串值;
    2. 表是由多个无符号数或其他表为数据项构成的复合数据类型;
  • 整个Class文件本质就是一张表
    《读书笔记-深入理解Java虚拟机#4》

魔数与Class文件的版本

  • Class文件的头4个字节称为魔数(0xCAFEBABE),用来确定这个文件是否能被虚拟机接受为Class文件。
  • 紧接着魔数的4个字节是Class文件版本号。

常量池

  • 版本号后是常量池入口,可以理解为Class文件的资源仓库。
  • 占用Class文件空间最大的数据项目之一。
  • 常量池中存放:字面量(文本字符串、声明为final的常量)和符号引用(编译原理方面的概念)。
    《读书笔记-深入理解Java虚拟机#4》

访问标志

  • 常量池结束后紧接着2个字节代表访问标志,用于识别一些类或接口层次的访问信息(是类还是接口等)。
    《读书笔记-深入理解Java虚拟机#4》

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

  • Class文件由这三项数据来确定这个类的继承关系。
  • 类索引确定类的全限定名,父类索引确定父类全限定名,接口索引集合描述这个类实现哪些接口。

字段表集合

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

方法表集合
《读书笔记-深入理解Java虚拟机#4》
属性表集合
《读书笔记-深入理解Java虚拟机#4》

二、字节码指令简介

字节码与数据类型

加载和存储指令

  • 用于将数据在栈帧的局部变量表和操作数栈直接来回传输。

运算指令

  • 用于对两个操作数栈上的值进行某种特定运算,并把结果重新存入到操作栈顶。

类型转换指令

  • 将两种冉的数值类型进行相互转换。

对象创建与访问指令

  • Java虚拟机对类实例和数组的创建于操作采用不同的字节码指令。

操作数栈管理指令

  • 如pop、pop2 将操作数栈的栈顶一个或两个元素出栈。
  • swap将栈最顶端的两个数值互换。

控制转移指令

  • 可让虚拟机从指定位置指令执行程序(类似goto跳转)。

方法调用和返回指令

异常处理指令

  • throw抛出异常等。

同步指令

    原文作者:java虚拟机
    原文地址: https://blog.csdn.net/xingyadong1986/article/details/82751887
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞