Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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将方法的大小限制为65535字节?_Java - Fatal编程技术网

为什么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的方法?