代码属性(Code Attribute)
代码属性是一个可变长度属性,在method_info结构体中的属性表(attributes字段)用到。代码属性保存了单个方法、实例初始化方法或者类(或接口)初始化方法。JVM实现必须识别代码属性。如果是本地方法或抽象方法,method_info结构中不可以有代码属性。否则method_info结构中必须有代码属性。
代码属性结构:
Code_attribute { u2 attribute_name_index; u4 attribute_length; u2 max_stack; u2 max_locals; u4 code_length; u1 code[code_length]; u2 exception_table_length; { u2 start_pc; u2 end_pc; u2 handler_pc; u2 catch_type; } exception_table[exception_table_length]; u2 attributes_count; attribute_info attributes[attributes_count]; |
attribute_name_index:
属性名称索引,表示这个属性在常量表中的索引,必须是一个有效的索引。常量表中这个索引位置的常量表记录必须是CONSTANT_Utf8_info结构,且为字符串“Code”
attribute_length:
属性长度,不包括初始6个字节。
max_stack:
最大深度,表示某个正在执行的方法,包括方法实例初始化方法或者类(或接口)初始化方法的操作数栈的最大深度。
max_locals:
表示在方法,包括方法实例初始化方法或者类(或接口)初始化方法在被调用时,局部变量表中最大局部变量的数目。
code_length:
表示方法,包括方法实例初始化方法或者类(或接口)初始化方法的Java虚拟机码的字节数,也就是code字段的长度。
code:
Java虚拟机码的实际字节数组,表示方法,包括方法实例初始化方法或者类(或接口)初始化方法的Java虚拟机码的实际字节信息。
exception_table_length:
异常表(exception_table)中记录数。
exception_table:
异常表,异常表(exception_table)中每个记录表示code字段(Java虚拟机码的实际字节信息)中的一个异常处理(exception handler)。异常表(exception_table)中的异常处理顺序具有特殊意义。
attributes_count:
表示属性个数,也就是attributes 字段的长度。
attributes:
属性表,属性表中的每个属性必须是attribute_info结构。代码属性可以有任意多可选的属性。
目前,定义了两种属性:行号表(LineNumberTable), 局部变量表(LocalVariableTable),这两种属性都包含调试信息。并且与代码属性一起使用。
允许JVM虚拟机实现默认忽略任何或所有的属性。规范中未定义的属性不可以影响class文件的语义,只是提供额外的描述性信息。
异常表中的记录
异常表中的记录包括4项:
start_pc:
end_pc:
同start_pc
handler_pc:
catch_type
相关推荐
- `attribute_count`和`attribute`用于存储方法可能具有的属性,例如`Code`属性表示方法体的字节码。 #### 三、示例分析 假设有一个简单的Class文件,包含以下信息: - 魔数:`0xCAFEBABE` - 版本号:主版本号为...
Java class文件格式是Java虚拟机(JVM)执行的基础,其中属性(Attributes)部分是class文件结构中的一个重要...此外,对Code属性的深入理解也有助于编写更高效、更易于维护的代码,因为可以更精确地控制JVM的行为。
The Code Attribute The ConstantValue Attribute The Exceptions Attribute The InnerClasses Attribute The LineNumberTable Attribute The LocalVariableTable Attribute The SourceFile Attribute The ...
`code`属性包含了方法的执行逻辑,是JVM执行程序的关键部分。 总之,Java Class文件中的方法部分通过`field_info`结构描述了类或接口的字段,包括它们的访问控制、名称、类型以及额外的属性信息。这些信息在JVM加载...
15. **属性信息(attribute_info)**:由attributes_count决定的数组,每个元素表示一个特定的属性,如Code、SourceFile、ConstantValue等。 Class文件的这种结构使得JVM可以高效地解析和执行Java代码。理解这些...
`bcel`(Byte Code Engineering Library)是一个强大的开源工具,允许开发者对Java字节码进行分析、生成和修改,从而实现动态类修改或者增强。 在Java开发中,动态类修改通常用于AOP(面向切面编程)、代码热部署、...
- **Attribute**:处理属性,如变量和方法的元数据。 - **Symbol**:维护类、方法、变量等符号的信息。 4. **错误和警告**: javac 在编译过程中会检测语法错误、类型不匹配等问题,并生成错误和警告信息。这些...
Java Virtual Machine Support for Non-Java Languages: Java SE 7 introduces a new JVM instruction that simplifies the implementation of dynamically typed programming languages on the JVM. Garbage-First...
- **Code属性**:描述了方法的字节码指令,包括局部变量表、操作栈深度等信息。 - **ConstantValue属性**:用于字段,表示该字段有一个固定的初始值。 - **Exceptions属性**:列举了方法可能抛出的异常类型。 - ...
`LocalVariableTypeTableAttribute`是Java虚拟机规范(JVMS)定义的一种非标准字节码属性,通常不会在运行时被JVM直接使用,而是为开发工具(如IDEs、调试器、静态分析工具等)提供服务。这个属性存储了方法内部局部...
9. **属性计数(Attributes Count)** 和 **属性信息数组(Attribute Info)**:类、字段和方法可以拥有自定义的属性,如代码(Code)属性、异常表(Exception Table)等。 解析Class文件的过程通常涉及以下步骤: ...
最后,`attributes_count`和`attribute_info`数组描述了类文件的额外元数据,如`Code`属性包含方法的字节码,`SourceFile`属性标识源文件名,`Deprecated`和`Synthetic`属性指示字段或方法的特定状态等。这些属性并...
- **Code Generator**:将语法树转换为字节码,这个过程涉及JVM指令集。 4. **javac源码中的关键技术** - **JavacTask**:作为编译任务的接口,提供了编译的入口点。 - **Tree API**:用于处理抽象语法树,简化...
Code Conventions for the Java Programming Language Standards and styles for coding Java programs. New-to-JavaTM Programming Center. New to the Java Platform. Java™ Platform Standard Ed. 6 All ...
**指令**: `<%@ directive attribute1="value1" %>`,如 `*" %>`, `<%@ include file="/header.html" %>`, `<%@ taglib uri="..." prefix="..." %>`. 3. **表达式**: `<%= expression %>`, 用于输出表达式的值。 ...
java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...
temp - Directory used by the JVM for temporary files (java.io.tmpdir) <br>If you do not pass the "-Dcatalina.base=$CATALINA_BASE" argument to the startup command, $CATALINA_BASE will default to ...
答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 40.接口是否可...
java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了...