• 《深入理解Java虚拟机》笔记6


    class文件由无符号数和表两种类型数据构成。表其实相当于一种结构体,内部又嵌套无符号数或者表。

    用u1,u2,u4,u8分别代表一个字节,两个字节,四个字节,八个字节的无符号数。

    如图中所示,class中有16种类型数据项(当然这些数据是表嵌套着别的数据)。有一点需要注意的是,如果某一数据项

    会以数组的形式出现多次,则此数据项前必定有一个无符号数的数据项来记录数组的大小。

    例如:常量池(constant_pool)的数量是多个,在常量池前会有常量池大小(constant_pool_count)的

    数据项。属性(fields)也是可以定义多次的数据项,之前会有属性个数(fields_count)的数据项存在。

    常量池有点特殊,看图可知,常量池的实际大小并不是constant_pool_count,而是constant_pool_count-1。

    这是为了满足后面某些指向常量池的索引值的数据在特定情况下

    需要表达“不引用任何一个常量池项目“,这种情况就可以把索引值置为0来表示。(到底是什么一种情况,我现在也不甚明白,之后明白了补上)

    class文件结构中只有常量池的容量计数是从1开始,其他集合类型,如接口索引结合,字段表集合,方法表集合等还是和Java语言习惯相同,

    从0开始计数。也就是说,如果常量池容量大小为22,实际常量池有21个,下标从1到21,方法表容量大小为22,实际方法就有22个。下标从0到21。

  • 相关阅读:
    C#--C/S--学员管理系统--6--班级和下拉框的数据绑定
    C#--C/S--学员管理系统--5--通用验证类的设计和程序退出
    1046. 最后一块石头的重量
    1029. 两地调度
    1005. K 次取反后最大化的数组和
    944. 删列造序
    874. 模拟行走机器人
    860. 柠檬水找零
    map按值排序
    map按键排序
  • 原文地址:https://www.cnblogs.com/zwm512327/p/3533656.html
Copyright © 2020-2023  润新知