属性表集合
来源:互联网 发布:心理测试 软件 编辑:程序博客网 时间:2024/06/10 15:53
属性表(attribute_info)在前面的讲解之中已经出现过数次,在Class文件、字段表、方法表都可以携带自己的属性表集合,以用于描述某些场景专有的信息。
虚拟机规范定义的属性
Code属性
Java程序方法体中的代码经过Javac编译器处理后,最终变为字节码指令存储在Code属性内。Code属性出现在方法表的属性集合之中,但并非所有的方法表都必须存在这个属性,譬如接口或者抽象类中的方法就不存在Code属性。
- attribute_name_index:指向常量池的索引,固定为Code
- max_stack:操作数栈深度的最大值
- max_locals:局部变量表所需的存储空间。max_locals的单位为Slot,小于32位的值(如int、byte、float)占用1一个Slot,double、long占用两个Slot。并不是方法中定义了多少个局部变量,就把这些局部变量所占Slot之和作为max_locals的值,当代码执行超过一个局部变量的作用域时,这个局部变量占用的Slot就可以被其他局部变量所使用,Javac编译器会根据变量的作用域来分配Slot给各个变量使用,然后计算max_locals的大小。
- code_length:字节码长度
- code:用于存储字节码指令的一系列字节流。每个指令都是一个u1类型数据,当虚拟机读取到code的一个字节码时,就可以找出这个字节码代表的是什么指令,并且可以知道这条指令后面是否需要跟随参数,以及参数应当如何理解。
- exception_table:异常表如下。如果当字节码在第start_pc行到第end_pc行之间(不含end_pc行)出现了类型为catch_type或者其子类的异常(catch_type为指向一个CONSTANT_Class_info型常量的引用),则转到第handler_pc行继续处理。当catch_type的值为0时,代表任意异常情况都需要转向到handler_pc行进行处理。
异常表实际上是Java代码的一部分,编译器使用异常表而不是简单的跳转命令来实现Java异常及finally处理机制。
Exceptions属性
Exceptions属性:方法可能抛出的异常
LineNumberTable
Java源码行号与字节码行号之间的对应关系,当抛出异常时,行号就是从这里获取到的。
LocalVariableTable
描述栈帧中局部变量表中的变量与Java源码中定义的变量之间的关系。如果没有这个表,在调试期间无法获得参数值。
阅读全文
0 0
- 属性表集合
- 表集合的extend属性
- AO 字段属性表操作集合贴
- 创建集合属性
- 创建集合属性
- options属性集合
- jdbcType 属性集合
- CSS属性大集合
- Spring装配集合属性
- hibernate属性集合
- hibernate映射集合属性
- js document属性集合
- hibernate的集合属性
- hibernate的集合属性 .
- document 对象属性集合
- JQ。属性,方法。集合。
- js 对象属性集合
- Android GridView属性集合
- [一天几个linux命令] linux文件属性
- New Handler
- eclipse noen 配置mavan必装插件
- 记一次00截断
- dovecot + mysql
- 属性表集合
- 欢迎使用CSDN-markdown编辑器
- C# 访问修饰符internal的访问范围误区释疑
- 文件复制
- easyUI tree 树形json的递归转换
- PS技能
- Ubuntu 16.04安装java
- 由简入繁阐述socket 网络编程
- linux体系结构+linux内核结构+linux内核目录结构