Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么constantpool的索引在类文件格式中占用不同的字节数_Java_Bytecode_Bytecode Manipulation - Fatal编程技术网

Java 为什么constantpool的索引在类文件格式中占用不同的字节数

Java 为什么constantpool的索引在类文件格式中占用不同的字节数,java,bytecode,bytecode-manipulation,Java,Bytecode,Bytecode Manipulation,我一直在学习java类格式,我只是想知道为什么有时带有常量池条目的操作码在类文件中占用两个字节,比如InvokeStatic,而带有整数索引的操作码(比如ldc)在类文件中只占用一个字节。这背后有什么模式吗?,我问这个问题是因为我正在编写一个简单的字节码操作库,我想知道是否可以将常量池索引作为字节或短字节写入库,而无需将每个命令硬编码到库中。是的,有一种模式:除ldc之外的所有指令都采用两字节索引 大概字节码格式的设计者决定加载常数是一项非常常见的任务,他们应该为它提供一个较短的指令。xxx\u

我一直在学习java类格式,我只是想知道为什么有时带有常量池条目的操作码在类文件中占用两个字节,比如InvokeStatic,而带有整数索引的操作码(比如ldc)在类文件中只占用一个字节。这背后有什么模式吗?,我问这个问题是因为我正在编写一个简单的字节码操作库,我想知道是否可以将常量池索引作为字节或短字节写入库,而无需将每个命令硬编码到库中。

是的,有一种模式:除ldc之外的所有指令都采用两字节索引


大概字节码格式的设计者决定加载常数是一项非常常见的任务,他们应该为它提供一个较短的指令。

xxx\u w
xxx
更宽。例如
ldc\u w
占用两个字节,而
ldc
占用一个字节。为什么不这样做呢instructions@Popgalop你必须向Java的设计者询问这一点。也许他们只是觉得不值得。