繁体   English   中英

varargs工具允许在java中使用多少个参数?

[英]How many parameters does the varargs facility permit in java?

我很想知道使用Java中的varargs工具可以传递多少参数。

是否存在JVM或内存限制? 据我所知,varargs是作为一个数组实现的,所以限制是由内存量决定的。 它是否正确?

Varargs是用于动态数组的语法糖,其大小足以适合编码的元素。

那么限制将是数组的大小,即2 31 (即大)。

考虑到大小是由编码的实际参数数量指定的,您将永远不必担心它。


快速测试确认通常的方法参数计数255不适用于单个varargs元素。

就在这里。 尝试分配大于Pergemn内存的内存,抛出OutOfMemory

请注意,这里没有关于数组或变量的特性。 您可以在分配的内存下方自由使用内存。

我希望这只是为了学习,而不是在你的应用程序中使用那些。

变量arity参数的数量没有明确的限制。 但是方法的大小是有限的。 它不应超过65535字节码

javac编译对变量arity方法的调用时,它使用如下模式创建并填充数组:

+0: dup
+1: bipush <index> (or sipush if index > 127)
+3: iconst_0
+4: iastore
+5: dup
    ...

因此,填充一个数组元素需要5或6个字节码。
这意味着您几乎可以使用超过10K的参数调用方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM