zoukankan      html  css  js  c++  java
  • 《深入理解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。

  • 相关阅读:
    Linux常用命令ifconfig的相关信息
    搭建路由实例
    httpclient以json形式参数调用http接口并解析返回的报文
    思考(机遇)
    php 对齐方法
    RequireJS简单介绍即使用
    一周小结(2016-06-06~2016-06-12)
    git介绍及使用
    一周小结(2016-05-30~2016-06-04)
    [转] Mou 一个Markdown工具 语法规则文档(最后)
  • 原文地址:https://www.cnblogs.com/zwm512327/p/3533656.html
Copyright © 2011-2022 走看看