美文网首页
【笔记】深入理解 java 虚拟机---Class的文件结构【3

【笔记】深入理解 java 虚拟机---Class的文件结构【3

作者: 张航_8ee7 | 来源:发表于2018-01-05 17:33 被阅读0次

    7 属性表集合

    这节真晦涩啊。 曾经一度想放弃。 包括现在也是似懂非懂的,不过真的看不下去了。先赶紧把会的总结下。

    什么是属性表?(好2)

    用来描述方法,字段的特征用的。有 21 种预定义属性,最主要的就是Code。

    代码

    code 的结构,code 就是 具体的代码。

    看一下 这个 

    依次是  

       0009     attribute_name_index       u2       指向 常量索引第9个      code

       0000001d     attribute_length         u4       属性值长度    

       0001             max_stack                u2         操作数栈的最大值        1

       0001            max_locals                u2            局部变量表所需要的存储空间。 1单位 slot。

       00000005        code_legth             u4            代码的长度                         5

    2a b7 00  01 b1     code                                          存储字节码指令的一系列字节流。   具体看 一下 javap 的  

    这就是你们写的代码最后的样子!。

    我们来 分析下  2a b7 00  01 b1  这段代码 怎么执行了。

    【1 】

    2a  

    【2】

    b7  

    【3】

    0001   这个是   第二步  invokespecial 的参数, 查常量池 0001  。 

    我的常量池 是

    书上的常量池

    【4】 

     b1  

    this 的本质。

    编译器 编译的时候,将对this关键字的访问当作一个普通方法的参数访问,调用实例时自动传入该参数。

    所以我们的  init 方法 和intc 方法,虽然没有参数,但是 locals =1,arg_size =1。 存的就是 this 的这个参数。

    code 的expection 表(非必须的)

    结构

    还有其它与 code 并列的属性。不写了,记不住。

    可以参考:

    相关文章

      网友评论

          本文标题:【笔记】深入理解 java 虚拟机---Class的文件结构【3

          本文链接:https://www.haomeiwen.com/subject/cpesnxtx.html