`
lobin
  • 浏览: 427477 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JVM Code Attribute

 
阅读更多

代码属性(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

分享到:
评论

相关推荐

    class文件结构组成.doc

    - `attribute_count`和`attribute`用于存储方法可能具有的属性,例如`Code`属性表示方法体的字节码。 #### 三、示例分析 假设有一个简单的Class文件,包含以下信息: - 魔数:`0xCAFEBABE` - 版本号:主版本号为...

    Java class文件格式之属性详解_动力节点java学院整理

    Java class文件格式是Java虚拟机(JVM)执行的基础,其中属性(Attributes)部分是class文件结构中的一个重要...此外,对Code属性的深入理解也有助于编写更高效、更易于维护的代码,因为可以更精确地控制JVM的行为。

    深入java虚拟机(inside the java virtual machine)

    The Code Attribute The ConstantValue Attribute The Exceptions Attribute The InnerClasses Attribute The LineNumberTable Attribute The LocalVariableTable Attribute The SourceFile Attribute The ...

    Java class文件格式之方法_动力节点Java学院整理

    `code`属性包含了方法的执行逻辑,是JVM执行程序的关键部分。 总之,Java Class文件中的方法部分通过`field_info`结构描述了类或接口的字段,包括它们的访问控制、名称、类型以及额外的属性信息。这些信息在JVM加载...

    Java class文件格式1

    15. **属性信息(attribute_info)**:由attributes_count决定的数组,每个元素表示一个特定的属性,如Code、SourceFile、ConstantValue等。 Class文件的这种结构使得JVM可以高效地解析和执行Java代码。理解这些...

    java字节码例子 可以动态修改类 bcel

    `bcel`(Byte Code Engineering Library)是一个强大的开源工具,允许开发者对Java字节码进行分析、生成和修改,从而实现动态类修改或者增强。 在Java开发中,动态类修改通常用于AOP(面向切面编程)、代码热部署、...

    javac 源码 javac 源码

    - **Attribute**:处理属性,如变量和方法的元数据。 - **Symbol**:维护类、方法、变量等符号的信息。 4. **错误和警告**: javac 在编译过程中会检测语法错误、类型不匹配等问题,并生成错误和警告信息。这些...

    java7帮助文档

    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...

    Java class文件格式之属性_动力节点Java学院整理

    - **Code属性**:描述了方法的字节码指令,包括局部变量表、操作栈深度等信息。 - **ConstantValue属性**:用于字段,表示该字段有一个固定的初始值。 - **Exceptions属性**:列举了方法可能抛出的异常类型。 - ...

    LocalVariableTypeTableAttribute.rar_Table

    `LocalVariableTypeTableAttribute`是Java虚拟机规范(JVMS)定义的一种非标准字节码属性,通常不会在运行时被JVM直接使用,而是为开发工具(如IDEs、调试器、静态分析工具等)提供服务。这个属性存储了方法内部局部...

    解析Java Class 文件过程

    9. **属性计数(Attributes Count)** 和 **属性信息数组(Attribute Info)**:类、字段和方法可以拥有自定义的属性,如代码(Code)属性、异常表(Exception Table)等。 解析Class文件的过程通常涉及以下步骤: ...

    java Class文件内部结构解析过程详解

    最后,`attributes_count`和`attribute_info`数组描述了类文件的额外元数据,如`Code`属性包含方法的字节码,`SourceFile`属性标识源文件名,`Deprecated`和`Synthetic`属性指示字段或方法的特定状态等。这些属性并...

    javac:javac原始码探索,认识java文件的编译过程

    - **Code Generator**:将语法树转换为字节码,这个过程涉及JVM指令集。 4. **javac源码中的关键技术** - **JavacTask**:作为编译任务的接口,提供了编译的入口点。 - **Tree API**:用于处理抽象语法树,简化...

    JavaSE-6.0-英文手册(2008/11/30_FullUpdate)

    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 ...

    jsp基础速成精华讲解

    **指令**: `<%@ directive attribute1="value1" %>`,如 `*" %>`, `<%@ include file="/header.html" %>`, `<%@ taglib uri="..." prefix="..." %>`. 3. **表达式**: `<%= expression %>`, 用于输出表达式的值。 ...

    JAVA_API1.6文档(中文)

    java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...

    tomcat-5.5.23

    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 ...

    net学习笔记及其他代码应用

    答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 40.接口是否可...

    java api最新7.0

    java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了...

Global site tag (gtag.js) - Google Analytics