跟进this question:Java方法有64kb字节码限制。
这为编译器带来了什么好处? GCC很乐意编译多兆字节的C方法 - 这个设计决策背后的原因是什么?正如this question中所建议的那样,限制糟糕的编程实践是否正确,因为64kb方法是巨大的?或者是否有一些特定的好处,限制是64kb而不是其他一些数字?
答案 0 :(得分:8)
方法字节码中的偏移量为2个字节长(在类文件格式规范中称为" u2")。可用u2表示的最大偏移量为64kB。
偏移量出现在实际指令中,例如if*
字节码,后跟两个包含分支偏移量增量的字节。此外,其他类文件属性(如StackMapTable
,LocalVariableTable
,Exceptions
和其他类文件属性也包含字节码的偏移量。
如果偏移量为u4,则方法可能会更长,但所有类文件也会更大。这是一种权衡。