• JVM Java字节码方法表与属性


    方法表

    1、methods_count

     method_info,前三个字段和field_info一样

    2、方法的属性结构

    方法中的每个属性都是一个attribut_info结构

    JVM定义了部分attribute,但是编译器自己也可以实现自己的attribute写入class文件里,供运行时使用。

    不同的attribute通过attribute_name_index来区分。

    JVM规范预定义的attribut

    3、Code结构

    Code attribute 的作用是保存该方法的结构,如所对应的字节码

    attribute_length表示attribute所包含的字节数,不包含attribute_name_index和attribute_length字段

    max_stack表示这个方法运行的任何时刻所能到达的操作数栈的最大深度。

    max_locals 表示方法执行期间创建的局部变量的数目,包含用来表示传入的参数的局部变量。

    code_length表示该方法所包含的字节码的字节数以及具体的指令吗

    具体字节码即时该方法被调用时,虚拟机执行的字节码

    exception_table,这里存放的是处理异常的信息

    每个exception_table表项由start_pc, end_pc, handler_pc, catch_type组成

    start_pc 和end_pc表示在code数组中的从start_pc到end_pc处(包含start_pc,不包含end_pc)的指令抛出的异常会由这个表项来处理。

    handler_pc表示处理异常的代码的开始处。

    catch_type表示会被处理的异常类型,它指向常量池里的一个异常类。当catch_type为0时,表示处理所有的异常

    附加属性

    LineNumberTable: 这个属性用来表示code数组中的字节码和Java代码行数之间的关系。这个属性可以用来在调试的时候定位代码执行的行数。

    LineNumberTable的结构

    字节码查看工具

    jclasslib

    https://github.com/ingokegel/jclasslib

    Idea上安装jclasslib插件

    插件安装好后,view里会多出两项

  • 相关阅读:
    uboot中fdt命令的使用
    unlocked_ioctl与compat_ioctl
    I2C中关于ACK和NACK的几点东西
    对IIC总线时序的一点理解以及ACK和NACK(NAK)
    usb Defined Class Codes
    排序检索数据
    【转载】5.Linux 网络编程——UDP编程
    【转载】4.Linux 网络编程——套接字的介绍
    【转载】3.Linux 网络编程——网络字节序、地址转换
    【转载】2. Linux 网络编程——网络字节序、地址转换
  • 原文地址:https://www.cnblogs.com/linlf03/p/11080389.html
Copyright © 2020-2023  润新知