我有兴趣了解可以使用Java中的可变参数工具传递多少个参数。可变参量工具在java中允许多少个参数?
是否存在JVM或内存限制? 据我了解,可变参数是作为一个数组实现的,所以极限由内存数量决定。它是否正确?
我有兴趣了解可以使用Java中的可变参数工具传递多少个参数。可变参量工具在java中允许多少个参数?
是否存在JVM或内存限制? 据我了解,可变参数是作为一个数组实现的,所以极限由内存数量决定。它是否正确?
是的。尝试分配大于您的Pergemn内存的内存,即抛出OutOfMemory
。
请注意,这里没有关于数组或可变参数的特殊功能。您可以在您分配的内存下方自由使用您的内存。
我希望这只是为了学习,而不是在你的应用程序中使用那么多。
我只是对极限感兴趣。我通常使用不超过3-5个参数。所以基本上它有一个内存限制。我懂了。 – lapots 2014-09-23 07:11:38
@ user1432980是的。得到它了。你在学习 :) – 2014-09-23 07:14:33
Varargs是一个动态数组,它的大小足以容纳编码的元素。
该限制然后将是数组的大小,即2 (即大)。
考虑到尺寸是由编码参数的实际数量指定的,您将不必担心它。
快速测试证实通常的方法参数计数255不适用于单个可变参数元素。
变量arity参数的数量没有明确的限制。但方法大小有限。它不应该超过65535字节码。
当javac
编译为一个可变参数数量方法的调用时,它创建和使用该图案像填充阵列:
+0: dup
+1: bipush <index> (or sipush if index > 127)
+3: iconst_0
+4: iastore
+5: dup
...
所以,填充一个阵列元件采用5个或6字节码。
这意味着你实际上可以调用一个多于10K参数的方法。
当你的设计好时,你不应该担心,如果你担心通过10多个参数,你应该重新考虑你的设计。 – Maroun 2014-09-23 07:09:10
AFIK它在内部作为一个数组处理,所以应用相同的规则。不过,我认为使用多于10个参数的方法是没有意义的。 – rekire 2014-09-23 07:09:56
@MarounMaroun嗯......我不会把它完全称为设计缺陷来构建超过十件事情的清单。 – 2014-09-23 07:12:01