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