Tips

IT技術系Tips

Stringクラス内のfor文の実装について(その1)

先日客先に出向いた時、あまりに待ち時間が長くて暇だったのでStringクラスの実装を見ていた。
そこで気になる実装があった。

for (int i=; i++ < value.length;) {
   ...省略

iをインクリメントしている場所がおかしい。

普通ならこう書く

for (int i=; i < value.length; i++) {
   ...省略

もしかしてi++ < value.length;って書いたほうが早いのか?
Stringクラスはfinalで定義されているのは、速度面でほんの少しだけ優位に立てるからだ。
(java8でもそうなのかは知らんけど)
このforの書き方も速度面を気にしてのことかもしれない。

この書き方の違いで速度に違いが出たとしても、本当にわずかな差なんだろうけど、
自分の仕事上、このわずかな差が効いてくるところがあるので気になる。

まだ動作については調べてないわけだが、今後どう調べて行くかというと・・・


まずは中間コードに差がでるかどうか調べる。
調査にはjavapコマンドを使う。
javap - Java クラスファイル逆アセンブラ

これで差があるようなら、次は実計測を行う。
この計測がかなり面倒なわけだが、適当に計測用のコードを書くと、コンパイラが最適化しちゃって処理そのものを捨てちゃったりするので
気をつけて検証用のソースを書かなきゃならない。


続きは来週あたり?