Java方法声明中的最大参数数

Java中的方法可以拥有的最大参数数量是什么?为什么?

我在64位Windows系统上使用Java 1.8。

关于StackOverflow的所有答案都表明,技术限制为255个参数,但未指定原因。

确切地说,静态方法为255,非静态方法为254(this在这种情况下为第255)。

我认为这可以用某种规范来描述,并且只允许静态定义最大数量的参数。

但这仅对 。我使用long参数进行了一些测试,在这种情况下,我只能声明127个参数。

使用String参数时,我从测试中得出的允许数字为255(可能是因为Java中的参考大小为4个字节?)。

但是由于我使用的是64位系统,因此引用的大小应为8字节宽,因此使用String参数时,与long类型相似,最大允许数量应为127 。

如何精确应用此限制?

限制与方法的 有关吗?

注意:我实际上不会在任何方法中使用这些许多参数,但是这个问题只是为了阐明确切的行为。

回答:

该限制在JVM规范中定义:

的方法的参数的数量 通过方法描述符(§4.3.3),其中该限制包括用于一个单位的定义 在实例或接口方法调用的情况下。

第4.3.3节提供了一些附加信息:

方法描述符仅在表示总长度小于或等于255的方法参数时才有效,其中该长度包括实例或接口方法调用时 对此 的贡献。

通过将各个参数的贡献相加来计算总长度, 。

您的发现很明显,双字原语(long/ double)需要两倍于通常的4字节变量 。

关于与64位系统有关的问题的最后一部分,规范定义了 一个参数贡献 多少个 单元 即使在64位平台上,该部分规范

,该64位JVM可以容纳255个实例参数(例如255个)Strings),而不考虑内部对象的指针大小。

以上是 Java方法声明中的最大参数数 的全部内容, 来源链接: utcz.com/qa/413159.html

回到顶部