2014-09-23 27 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參數的方法。

相關問題