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

[jfriends] 返値を毎回newして返すか、使いまわすか




> >悩ましいのは返すインスタンスを、誰も所有していない(どのインスタンス
> >のメンバとしても参照されてない・どのメソッドの変数も参照していない)
> >ものにするか(つまり、確実にnewして返すのか)、
> >はたまた、効率を考えてキャッシュしたりメンバとして参照しているものを、
> >返すのかという点です。
> >AWTで、Dimension を返すメソッド群は、このポリシーが不統一で、悩んだ
> >記憶があります。
                  :
>  以前、メソッド呼び出しごとにインスタンスを生成する場合と、メソッドを呼び出
> す方でインスタンスを生成しておいて引数で渡す場合とで、メソッドのみを1000
> 000回ほど繰り返して時間を測ってみたことがありますが、目に見えて処理時間が
> 変わりました。(具体的な結果は忘れましたが毎回newするとそうでないものに対し
> て約30倍程度の時間がかかります。) もちろんStringを使う場合は使い方によっ
> てはこのような結果には成りませんが、、、、

なるほど、30倍の差が出ましたか。
そのメソッドを呼び出すだけの単純ベンチマークでその程度の差なら、
さほど心配することも無いかなという気がしました。

返値に使うインスタンスを使いまわすと、そのインスタンスの内容を
(受け取った側、保持している側で)変更して良いかどうかが、
問題となります。
AWTが返すDimensionの扱いで悩んだのはその判断でした。

java.lang.Stringのように、インスタンスが変更不可能なものは
使いまわしても全く問題無いのですが。