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

Pat*_*ins 2 java jvm bytecode

关注这个问题:Java方法有64kb字节码限制.

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

Ing*_*gel 8

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

偏移量出现在实际指令中,例如if*字节码,后跟两个包含分支偏移量增量的字节.此外,其他类文件属性,如StackMapTable,LocalVariableTable,Exceptions和其他含有偏移成字节码.

如果偏移是u4,那么方法可能会更长,但所有类文件也会更大.这是一种权衡.