为什么Java将方法的大小限制为65535字节?
我刚刚编译了以下代码为什么Java将方法的大小限制为65535字节?,java,Java,我刚刚编译了以下代码 public class A { public static void main(String... args) { int i = 3; ++i; ++i; ++i; ++i; ++i; ++i; ++i; ++i; // repeat writing the expression ++i for 20,
public class A {
public static void main(String... args) {
int i = 3;
++i;
++i;
++i;
++i;
++i;
++i;
++i;
++i;
// repeat writing the expression ++i for 20,000 times
System.out.println(i);
}
}
并收到以下错误消息
main方法(字符串…)的代码为
超过65535字节的限制
为什么Java实现了这个限制?我没有看到rational,因为Java确实包含goto_w指令。请参阅第4.10节:
4.10 Java虚拟机的限制
- 每个非本机非抽象方法的代码量受代码属性(§4.7.3)、LineNumberTable属性(§4.7.8)和LocalVariableTable属性(§4.7.9)的exception_表中索引的大小限制为65536字节
在面向对象编程语言中使用这么长的方法几乎没有什么好的理由。实际上有一个相当好的理由。。。代码生成。是的,我知道人们在JSP文件中达到了这个极限。我还是不相信这是个好理由。这意味着,几乎可以肯定的是,单个JSP文件中存在太多的复杂性。无论这一决定的原因是什么,“我们将在某个地方有64k的限制”的想法应该是令人震惊的。在过去的几年里,我们没有看到什么极限在下降!经验表明,每当有人想:这应该足够了!几年后他被伪造了。@WhiteFang-当然,这太复杂了,不,我们无法想象一个程序真的需要超过640k内存,是吗?@Ingo,在某种程度上,我们总是不得不担心大小。现代语言常常隐藏这一点,但这并不意味着没有进行权衡。例如,我们应该允许URL访问多大?(请参阅)为什么要使用长度超过65535的方法?