Class codeAttr


public class codeAttr
extends attrInfo

Attribute for the byte code for a Java method. The attribute name for the codeAttr is "Code". Note that if the method is native or abstract, then it can't have a "Code" attribute.

The structure of a Code attribute is:

Code_attribute {
u2 name_index;
u4 total_length;
u2 max_stack;
u2 max_locals;
u4 code_length;
u1 code[ code_length ];
u2 exceptions_table_length;
exceptInfo except[ exceptions_table_length ];
u2 attributes_count;
attribute_info attributes[ attributes_count ];


exceptInfo {
u2 start_pc;
U2 end_pc;
u2 handler_pc;
u2 catch_type;

The attribute_name_index and attribute length are read by the attrFactory.allocAttr method. These values are passed into the class constructor.

In the exceptInfo the catch_type is an index into the constant pool. The object at this index must be a CONSTANT_Class_info object (e.g., constClass_or_String) for an exception class that this exception is designated to catch. This class must be the class Throwable or one of its subclasses.

Although code_length is 32-bits wide, its value must be less than 0x10000 (65536) (see JVM Spec 4.8.1).

The max_stack value is the size of the operand stack. This in in word units, where an int is one word and a long or double is two: At any point in time an operand stack has an associated depth, where a value of type long or double contributes two units to the depth and a value of any other type contributes one unit. (JVM Spec 3.6.2) The max_locals value is the size of the local frame allocated on entry to the method. This frame will hold local variables and method arguments. As with max_stack, the units are words. Like the stack, the frame is word aligned so a boolean or a byte occupies a word and a long or a double occupies two words (JVM Spec 3.6.1). If max_locals is zero, then there are no local variables. If debug is turned and the method has local variables then the codeAttributes table will contain a LocalVariableTable attribute. This attribute in turn contains a table of local variable information.

Ian Kaplan

Inner Class Summary
(package private)  class codeAttr.exceptInfo
Field Summary
private  attrInfo[] codeAttributes
private  byte[] codeBuf
private  codeAttr.exceptInfo[] exceptTab
private  int max_locals
private  int max_stack
Fields inherited from class attr.attrInfo
attrName, len
Fields inherited from class util.dataRead
Constructor Summary
codeAttr(java.lang.String name, int length, dStream, constPool constPoolSec)
          codeAttr constructor
Method Summary
 java.util.Vector getLocalVarVec()
          If there are local variables in the method, return a vector containing the local variable name declarations.
 int getMax_locals()
 int getMax_stack()
Methods inherited from class attr.attrInfo
getName, pr
Methods inherited from class util.dataRead
getBytesRead, readU1, readU2, readU4
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait

Field Detail


private int max_stack


private int max_locals


private byte[] codeBuf


private codeAttr.exceptInfo[] exceptTab


private attrInfo[] codeAttributes
Constructor Detail


public codeAttr(java.lang.String name,
                int length,
                constPool constPoolSec)
codeAttr constructor

Here the length argument is the attribute length (e.g., the total length of the attribute).

Method Detail


public java.util.Vector getLocalVarVec()
If there are local variables in the method, return a vector containing the local variable name declarations. There should be only one localVarTabAttr in the codeAttributes table.


public int getMax_locals()


public int getMax_stack()