【问题标题】:Why does Java limit the size of a method to 65535 byte?为什么 Java 将方法的大小限制为 65535 字节?
【发布时间】:2011-04-16 21:40:02
【问题描述】:

我刚刚编译了以下代码

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(String...) 的代码是 超过 65535 字节限制

Java 为什么要实现这个限制?由于 Java 确实包含 goto_w 指令,因此我看不到合理性。

【问题讨论】:

  • 为什么要一个比 65535 更长的方法?

标签: java


【解决方案1】:

参见Java Virtual Machine Specification 第 4.10 节:

4.10 Java 虚拟机的限制

  • 每个非本地、非抽象方法的代码量受限于 65536 字节,这取决于代码属性的 exception_table(第 4.7.3 节)和 LineNumberTable 属性(第 4.7.8 节)中的索引大小),以及 LocalVariableTable 属性 (§4.7.9)。

在面向对象的编程语言中拥有这么长时间的方法的充分理由。

【讨论】:

  • 其实有一个很好的理由……代码生成。 velocityreviews.com/forums/…
  • 是的,我知道人们在 JSP 文件中达到了这个限制。我仍然不买这个作为一个很好的理由。这意味着几乎可以肯定,单个 JSP 文件过于复杂。
  • 不管这个决定的原因是什么——“我们将在某个地方有 64k 限制”的想法。应该是令人震惊的。在过去的几年里,我们没有看到什么限制!经验表明,每次有人想:这应该绰绰有余了!几年后他被伪造了。
  • @WhiteFang - 当然,这将是“太多”的复杂性,不,我们无法想象一个程序真的需要超过 640k 的内存,对吗?
  • @Ingo,在某种程度上,我们总是需要担心大小。现代语言经常隐藏这一点,但这并不意味着没有进行权衡。例如,我们应该允许一个 URL 有多大? (见stackoverflow.com/questions/417142/…
猜你喜欢
  • 2016-06-10
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 2017-07-30
  • 2017-09-16
  • 2019-12-28
  • 1970-01-01
  • 2015-10-18
相关资源
最近更新 更多