[英]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.