字节码限制的目的是什么?

时间:2014-05-29 16:40:17

标签: java jvm bytecode

跟进this question:Java方法有64kb字节码限制。

这为编译器带来了什么好处? GCC很乐意编译多兆字节的C方法 - 这个设计决策背后的原因是什么?正如this question中所建议的那样,限制糟糕的编程实践是否正确,因为64kb方法是巨大的?或者是否有一些特定的好处,限制是64kb而不是其他一些数字?

1 个答案:

答案 0 :(得分:8)

方法字节码中的偏移量为2个字节长(在类文件格式规范中称为" u2")。可用u2表示的最大偏移量为64kB。

偏移量出现在实际指令中,例如if*字节码,后跟两个包含分支偏移量增量的字节。此外,其他类文件属性(如StackMapTableLocalVariableTableExceptions和其他类文件属性也包含字节码的偏移量。

如果偏移量为u4,则方法可能会更长,但所有类文件也会更大。这是一种权衡。