2

今天我第一次收到以下错误消息...

java.lang.Error: Unresolved compilation problem: 
    The code of method init() is exceeding the 65535 bytes limit

    at generator.Main.init(Main.java:36)
    at sun.applet.AppletPanel.run(AppletPanel.java:425)
    at java.lang.Thread.run(Thread.java:680)

导致错误是因为我在 init() 方法中创建了一个包含大约 10,000 个整数的数组列表。这个问题的解决方案不是很复杂,我做了 3 个方法,每个方法都有 3,300 个 int,并从我的 init() 中调用它们。

但我有几个问题纯粹是出于好奇。

  1. 为什么方法有空间限制?
  2. 为什么限制为 65535 字节?(2^something-1?)
  3. 有没有办法给一个方法更多的空间,或者它们都会被限制相同的数量?
  4. 65535 字节究竟有多少信息?
4

2 回答 2

2

Java 虚拟机规范第 4.11 节

Java 虚拟机的限制

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

于 2013-10-01T21:55:54.663 回答
-1

答案可以在 JVM 规范的“类文件格式”页面中找到。JVM 必须以这种方式工作,否则它们就不是 JVM。

http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html

于 2013-10-01T21:59:36.887 回答