我有興趣瞭解可以使用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