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

时间:2014-09-23 07:07:23

标签: java variadic-functions

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

是否有JVM或内存限制? 据我所知,varargs是作为一个数组实现的,所以限制是由内存量决定的。这是对的吗?

3 个答案:

答案 0 :(得分:3)

Varargs是一个动态数组的语法糖,它的大小足以适合编码的元素。

然后限制是数组的大小,即2 31 (即大)。

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


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

答案 1 :(得分:2)

是的。尝试分配大于Pergemn内存的内存,抛出OutOfMemory

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

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

答案 2 :(得分:2)

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

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

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

因此,填充一个数组元素需要5或6个字节码 这意味着您实际上可以使用 10K参数来调用方法。