2016-07-20 8 views
0

Javaではネストされたforループがいくつありますか? ネストされたforループを無限に追加することはできますか? Javaコンパイラはいくつのforループをサポートできますか?ループのネストされた数 - いくつですか?

+7

コンパイラは、あらゆる正気なコードレビューアをサポートしています。 –

答えて

5

コンパイラにはスタックサイズが制限されています。ネストループが多すぎる場合は、StackOverflowErrorが表示されます。

私は、次のbashスクリプト(ループのネストされたNを生成する)を実行する場合、私はStackOverflowErrorを得る:

#!/bin/bash 

N=800 

(echo "class Test { void test() {" 
yes "for (;;) {" | head -n "${N}" 
yes "}" | head -n "${N}" 
echo "} }") > Test.java 

javac Test.java 

(800タイトバインドされていない; 700のコンパイル、800にはない)

-J-Xssフラグを使用してjavacスタックのサイズを増やすことができます。

また、1つのメソッドのバイトコードサイズに64kBの制限があります。もし何かをするル​​ープを書くのであれば、コンパイラのスタックを吹く前にこの制限を打つかもしれません。上記のスクリプトで生成された簡単なforループは、コンパイラによって1つの無限ループに最適化されています。

関連する問題