翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

4.4.7. The CONSTANT_Utf8_info Structure

The CONSTANT_Utf8_info structure is used to represent constant string values:

代表常量字符串。

翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

The items of the CONSTANT_Utf8_info structure are as follows:

条目如下:

tag

The tag item of the CONSTANT_Utf8_info structure has the value CONSTANT_Utf8 (1).

tag值为CONSTANT_Utf8

length

The value of the length item gives the number of bytes in the bytes array (not the length of the resulting string).

bytes数组的长度

bytes[]

The bytes array contains the bytes of the string.

No byte may have the value (byte)0.

No byte may lie in the range (byte)0xf0 to (byte)0xff.

该数组包含字符串的字节。

不能包含0.

不能在0xf0 到 (byte)0xff.范围内

String content is encoded in modified UTF-8. Modified UTF-8 strings are encoded so that code point sequences that contain only non-null ASCII characters can be represented using only 1 byte per code point, but all code points in the Unicode codespace can be represented. Modified UTF-8 strings are not null-terminated. The encoding is as follows:

翻译:字符串内容以修改后的UTF-8编码。修改版UTF-8编码后,仅包含非空ASCII字符的码点序列能够用(每个码点一个1字节)来标识,但是所有的Unicode代码段中的码点能够被标识。

  • Code points in the range '\u0001' to '\u007F' are represented by a single byte:

翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

The 7 bits of data in the byte give the value of the code point represented.

  翻译:'\u0001' to '\u007F' 用单字节标识

  • The null code point ('\u0000') and code points in the range '\u0080' to '\u07FF' are represented by a pair of bytes x and y :

翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

The two bytes represent the code point with the value:

翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

翻译:空码点('\u0000') 和 '\u0080' to '\u07FF' 范围内的可以用x和y来标识,然后通过上面的公式代入x和y的值来算出码点。(类似于2字节编码的那部分UTF-8)

  • Code points in the range '\u0800' to '\uFFFF' are represented by 3 bytes xy, and z :

翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

  翻译: '\u0800' to '\uFFFF' 用三字节编码,用x、y、z三字节来编码。

  • Characters with code points above U+FFFF (so-called supplementary characters) are represented by separately encoding the two surrogate code units of their UTF-16 representation. Each of the surrogate code units is represented by three bytes. This means supplementary characters are represented by six bytes, uvwxy, and z :

翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

The bytes of multibyte characters are stored in the class file in big-endian (high byte first) order.

There are two differences between this format and the "standard" UTF-8 format. First, the null character (char)0 is encoded using the 2-byte format rather than the 1-byte format, so that modified UTF-8 strings never have embedded nulls. Second, only the 1-byte, 2-byte, and 3-byte formats of standard UTF-8 are used. The Java Virtual Machine does not recognize the four-byte format of standard UTF-8; it uses its own two-times-three-byte format instead.

For more information regarding the standard UTF-8 format, see Section 3.9 Unicode Encoding Forms of The Unicode Standard, Version 6.0.0.

翻译:6字节编码?多字符的字节存储在class文件中,大端序。

该编码和标准utf-8有两个差别。第一,空字符0用了2字节编码而不是1字节,因此修改后的UTF8字符串没有null值。第二,标准utf8中1,2,3字节格式的编码被支持。java虚拟机不识别4字节的编码;因此使用了6字节格式代替。

4.4.8. The CONSTANT_MethodHandle_info Structure

The CONSTANT_MethodHandle_info structure is used to represent a method handle:

翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

The items of the CONSTANT_MethodHandle_info structure are the following:

tag

The tag item of the CONSTANT_MethodHandle_info structure has the value CONSTANT_MethodHandle(15).

值为CONSTANT_MethodHandle

reference_kind

The value of the reference_kind item must be in the range 1 to 9. The value denotes the kind of this method handle, which characterizes its bytecode behavior (§5.4.3.5).

值必须为1-9.它的值标识了这个方法处理的类型?

reference_index

The value of the reference_index item must be a valid index into the constant_pool table. Theconstant_pool entry at that index must be as follows:

  • If the value of the reference_kind item is 1 (REF_getField), 2 (REF_getStatic), 3 (REF_putField), or 4 (REF_putStatic), then the constant_pool entry at that index must be aCONSTANT_Fieldref_info (§4.4.2) structure representing a field for which a method handle is to be created.

  • If the value of the reference_kind item is 5 (REF_invokeVirtual) or 8 (REF_newInvokeSpecial), then the constant_pool entry at that index must be a CONSTANT_Methodref_info structure (§4.4.2) representing a class's method or constructor (§2.9) for which a method handle is to be created.

  • If the value of the reference_kind item is 6 (REF_invokeStatic) or 7 (REF_invokeSpecial), then if the class file version number is less than 52.0, the constant_pool entry at that index must be aCONSTANT_Methodref_info structure representing a class's method for which a method handle is to be created; if the class file version number is 52.0 or above, the constant_pool entry at that index must be either a CONSTANT_Methodref_info structure or aCONSTANT_InterfaceMethodref_info structure (§4.4.2) representing a class's or interface's method for which a method handle is to be created.

  • If the value of the reference_kind item is 9 (REF_invokeInterface), then the constant_pool entry at that index must be a CONSTANT_InterfaceMethodref_info structure representing an interface's method for which a method handle is to be created.

If the value of the reference_kind item is 5 (REF_invokeVirtual), 6 (REF_invokeStatic), 7 (REF_invokeSpecial), or 9 (REF_invokeInterface), the name of the method represented by a CONSTANT_Methodref_info structure or a CONSTANT_InterfaceMethodref_info structure must not be <init> or <clinit>.

If the value is 8 (REF_newInvokeSpecial), the name of the method represented by a CONSTANT_Methodref_info structure must be <init>.

   翻译:reference_index 值必须是有效索引。指向的值可以是如下:

    如果reference_kind 是1(REF_getField), 2 (REF_getStatic), 3 (REF_putField), or 4 (REF_putStatic), 那么值必须为CONSTANT_Fieldref_info,代表一个将要为方法handle创建的域

    如果 reference_kind item是 5 (REF_invokeVirtual) 或者8 (REF_newInvokeSpecial),那么值为CONSTANT_Methodref_info ,代表一个类的方法或者构造函数

      如果 reference_kind item 是6 (REF_invokeStatic) 或者7 (REF_invokeSpecial), 那么class文件的版本号小于52.0,值为CONSTANT_Methodref_info ,代表一个类的方法;如果版本号大于52,那么要么是一个CONSTANT_Methodref_info ,要么                                       是aCONSTANT_InterfaceMethodref_info ,代表一个类或者接口的方法。

如果 reference_kind item 是9 (REF_invokeInterface),那么值须为CONSTANT_InterfaceMethodref_info ,标识一个接口的方法。

4.4.9. The CONSTANT_MethodType_info Structure

The CONSTANT_MethodType_info structure is used to represent a method type:

代表一个方法类型

翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

The items of the CONSTANT_MethodType_info structure are as follows:

tag

The tag item of the CONSTANT_MethodType_info structure has the value CONSTANT_MethodType (16).

descriptor_index

The value of the descriptor_index item must be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_Utf8_info structure (§4.4.7) representing a method descriptor (§4.3.3).

翻译:值须指向CONSTANT_Utf8_info,标识一个方法描述符

4.4.10. The CONSTANT_InvokeDynamic_info Structure

The CONSTANT_InvokeDynamic_info structure is used by an invokedynamic instruction (§invokedynamic) to specify a bootstrap method, the dynamic invocation name, the argument and return types of the call, and optionally, a sequence of additional constants called static arguments to the bootstrap method.

翻译:被invokedynamic 使用,指定一个启动方法,或者动态调用名,参数和返回类型,静态参数(可选)

翻译:JVM虚拟机规范1.7中的运行时常量池部分(三)

The items of the CONSTANT_InvokeDynamic_info structure are as follows:

tag

The tag item of the CONSTANT_InvokeDynamic_info structure has the value CONSTANT_InvokeDynamic(18).

bootstrap_method_attr_index

The value of the bootstrap_method_attr_index item must be a valid index into the bootstrap_methods array of the bootstrap method table (§4.7.23) of this class file.

须为本class文件中启动方法表的bootstrap_methods数组 中有效索引

name_and_type_index

The value of the name_and_type_index item must be a valid index into the constant_pool table. Theconstant_pool entry at that index must be a CONSTANT_NameAndType_info structure (§4.4.6) representing a method name and method descriptor (§4.3.3).

必须为CONSTANT_NameAndType_info 类型,代表一个方法名和方法描述符

上一篇:点击Button按钮实现页面跳转


下一篇:RFS_点击button按钮之后,RFS出现卡死的问题