Java 7 和 8 中方法的最大大小

2022-08-31 12:16:23

我知道使用Java的方法不能大于64 KB。该限制导致我们从 JavaCC 语法生成的代码出现问题。我们在Java 6上遇到了问题,并且能够通过更改语法来解决此问题。是否更改了 Java 7 的限制,还是计划用于 Java 8?

只是为了说清楚。我自己不需要大于64 KB的方法。但是我写了一个语法,可以编译成一个非常大的方法。


答案 1

根据JVMS7

end_pc是独占的事实是Java虚拟机设计中的一个历史错误:如果方法的Java虚拟机代码正好是65535字节长,并以1字节长的指令结尾,那么该指令就不能受到异常处理程序的保护。编译器编写者可以通过将任何方法、实例初始化方法或静态初始值设定项(任何代码数组的大小)生成的 Java 虚拟机代码的最大大小限制为 65534 字节来解决此错误。

但这是关于.Java 8没有最终的规范,所以没有人(除了它的开发人员)可以回答这个问题。Java 7

UPD (2015-04-06)根据JVM8,对于.Java 8


答案 2

问得好。与往常一样,我们应该去源代码找到答案(“Java®虚拟机规范”)。不过,本节没有明确提到限制(就像Java6 VM规范一样),但有些谨慎:

调用方法 (§2.6) 时创建的帧的局部变量数组中的最大局部变量数限制为 65535,这取决于 Code 属性 (§4.7.3) 中给出方法代码的 max_locals 项的大小,以及 Java 虚拟机指令集的 16 位局部变量索引。

干杯


推荐