[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 10714] Re: Java Performance Tuning (2nd Edition)



村山@NETGENEです.

>     try-catch blocks generally use no extra time if no exception is thrown,
>   although some VMs may impose a slight penalty. The following test

これはペナルティというよりは,最適化の障害になってるということ
ではないですかね.
#ペナルティという単語の定義にもよるけど.

実際にどういう最適化を行っているかは実装依存なので全く分かりませんが...

>     try {
>       for (int j = repeat; j > 0; j--) {
>         i[0] = (Integer) o[(j+1)%2];
>         i[1] = (Integer) o[j%2];
>         i[2] = (Integer) o[(j+2)%2];
>       }
>       return false;
>     }
>     catch (Exception e) {
>       return true;
>     }
>   }

の方だと複数のループを跨った最適化も普通に行われるでしょうが,

>     for (int j = repeat; j > 0; j--) {
>       try {
>         i[0] = (Integer) o[(j+1)%2];
>         i[1] = (Integer) o[j%2];
>         i[2] = (Integer) o[(j+2)%2];
>       }
>       catch (Exception e) {
>         return true;
>       }
>     }
>     return false;
>   }

の方だとそれが少し難しくなると.強力な最適化をかける上で,ループ内の
try-catchや条件分岐はあまり嬉しくはないでしょう.


...と,ここまで書いてから気付いたけど,バイトコードだと
必ずしもこの順番になってるわけじゃないんですよね.えーっと,
どうなってたっけ?

#いずれにせよ,try-catchをわざわざループ内には入れない方が無難
#だというのは確かだと思う.

-- 
村山敏清 株式会社ネットジーン 〒164-0001 
東京都中野区中野3-33-3 インツ中野ビル 5F
E-mail:murayama@xxxxxxxxxxxxx 
TEL:(03)5328-3670 FAX:(03)5328-3673
http://www.netgene.co.jp/