Java 中的方法可以拥有的最大参数数量是多少?为什么?
我在 64 位 Windows 系统上使用 Java 1.8。
StackOverflow 上所有关于此问题的答案都说技术限制是 255 个参数,但没有具体说明原因。
准确地说,静态为 255,非静态为 254(this
在这种情况下将是第 255 个)方法。
我认为这可以用某种规范来描述,并且只是静态定义允许的最大参数数量。
但这仅适用于int
以及所有 4 字节类型。
我做了一些测试long
参数,在这种情况下我只能声明 127 个参数。
With String
参数,我测试得出的允许数量是255(可能是因为Java中引用大小是4字节?)。
但由于我使用的是 64 位系统,引用大小应该是 8 字节宽,所以String
参数最大允许数量应为 127,类似于long
types.
这个限制具体是如何应用的?
和限制有关系吗堆栈大小的方法?
注意:我实际上并不打算在任何方法中使用这么多参数,但这个问题只是为了澄清确切的行为。
该限制定义在JVM规范:
方法参数的数量仅限 255 个根据方法描述符(§4.3.3)的定义,其中限制包括一个单位this在实例或接口方法调用的情况下。
Section §4.3.3提供了一些附加信息:
仅当方法描述符表示总长度为 255 或更短的方法参数时才有效,其中该长度包括对this在实例或接口方法调用的情况下。
总长度是通过将各个参数的贡献相加来计算的,其中 long 或 double 类型的参数贡献两个单位的长度,任何其他类型的参数贡献一个单位的长度.
你的观察是正确的,双字原语(long
/double
) 需要两倍于通常 4 字节变量的大小和 4 字节对象实例引用.
关于与 64 位系统相关的问题的最后一部分,规范定义了多少单位参数贡献,规范的该部分仍须遵守即使在 64 位平台上,64 位 JVM 也将容纳 255 个实例参数(就像您的 255 个实例参数一样)Strings
) 无论内部对象的指针大小如何。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)