2014-09-23 24 views
3

我有兴趣了解可以使用Java中的可变参数工具传递多少个参数。可变参量工具在java中允许多少个参数?

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

+3

当你的设计好时,你不应该担心,如果你担心通过10多个参数,你应该重新考虑你的设计。 – Maroun 2014-09-23 07:09:10

+3

AFIK它在内部作为一个数组处理,所以应用相同的规则。不过,我认为使用多于10个参数的方法是没有意义的。 – rekire 2014-09-23 07:09:56

+0

@MarounMaroun嗯......我不会把它完全称为设计缺陷来构建超过十件事情的清单。 – 2014-09-23 07:12:01

回答

2

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

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

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

+1

我只是对极限感兴趣。我通常使用不超过3-5个参数。所以基本上它有一个内存限制。我懂了。 – lapots 2014-09-23 07:11:38

+0

@ user1432980是的。得到它了。你在学习 :) – 2014-09-23 07:14:33

3

Varargs是一个动态数组,它的大小足以容纳编码的元素。

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

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


快速测试证实通常的方法参数计数255不适用于单个可变参数元素。

2

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

javac编译为一个可变参数数量方法的调用时,它创建和使用该图案像填充阵列:

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

所以,填充一个阵列元件采用5个或6字节码。
这意味着你实际上可以调用一个多于10K参数的方法。

相关问题