0

次のコードがあるとします。

for(Element elm : elements)
   if(elm instanceof Foobar)
      Session.getSomething().getListOfSomething().add((Foobar)elm);

以下のようにしたほうがよいのではないでしょうか?

List<Foobar> list = Session.getSomething().getListOfSomething();

for(Element elm : elements)
   if(elm instanceof Foobar)
      list.add((Foobar)elm);

ループの実行中に Something と listOfSomething が変更されないと仮定します。これにより、メソッド呼び出しが減少するため、コールスタックのプッシュ/ポップの数を大幅に削減できると考えています。

このタイプの最適化はあまりにもつまらないものですか? Javaコンパイラがこの方法で最適化できると想定するとは思いません。

編集: AddAll の使用を除外するためにコードを単純化しない

4

2 に答える 2

1

ほとんどの場合、そのほうがよいでしょう。その理由は、Java は呼び出し規則にかなり厳密であり、反復ごとに 4 つの追加の仮想呼び出しを行わなければならないからです。いくつかの例外 (つまり、JIT によるインライン化) がありますが、それは風変わりです。

デフォルト関数を使用する方が良いかもしれませんが:

Session.getSomething().getListOfSomething().addAll(elements)
于 2013-04-18T18:42:27.637 に答える