2011-08-12 1 views
1

"FRAME FULL"と "FRAME APPEND"の違いは何ですか? 私はイテレータを使用するには2つの方法をご確認ください:"FRAME FULL"と "FRAME APPEND"のJavaバイトコードの違い

int size = 0; 
Iterator<String> it = l.iterator(); 
while (it.hasNext()) { 
    String s = it.next(); 
    int length = s.length(); 
    size += length; 
} 

int size = 0; 
for (String s : l) { 
     int length = s.length(); 
     size += length; 
} 

は、彼らは両方のイテレータを使用していますが、バイトコードは少し異なっています。

答えて

2

フレームタイプappend_frameは、オペランドスタックが空で、現在の地方自治体が前のフレームの地方自治体と同じ場合に使用されますが、k個の追加の地方自治体が定義されています。フレームタイプfull_frameは、他のすべてのタイプが適用可能でない場合に使用され、コンパクトでもありません。

+0

これは合理的です。そしてイテレータの生存場所はどちらの場合も少し異なります。 – Dainius

1

最初のバージョンには明示的なイテレータ名、つまり1つ以上のローカル変数があります。フレームには、ローカル変数のグループの開始と終了が表示されます。私はそれがすべてのローカル変数を記述していることを意味すると仮定し、appendは追加のローカル変数を追加することを意味します。

関連する問題