[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends] Re: 返値を毎回newして返すか、使いまわすか
前橋です。
中川さん:
> 以前、メソッド呼び出しごとにインスタンスを生成する場合と、メソッドを呼び出
>す方でインスタンスを生成しておいて引数で渡す場合とで、メソッドのみを1000
>000回ほど繰り返して時間を測ってみたことがありますが、目に見えて処理時間が
>変わりました。(具体的な結果は忘れましたが毎回newするとそうでないものに対し
>て約30倍程度の時間がかかります。) もちろんStringを使う場合は使い方によっ
>てはこのような結果には成りませんが、、、、
久野さん:
>なるほど、30倍の差が出ましたか。
>そのメソッドを呼び出すだけの単純ベンチマークでその程度の差なら、
>さほど心配することも無いかなという気がしました。
>
>返値に使うインスタンスを使いまわすと、そのインスタンスの内容を
>(受け取った側、保持している側で)変更して良いかどうかが、
>問題となります。
複数の値をまとめて返してもらうことだけが目的なら、呼び出し側
でnew して、そのポインタをメソッドに渡して、値を詰めてもらう、
という手が使えるかも知れませんけど。
処理速度が問題になる場合は、たいていループで何回も回っている
のでしょうから、
Baketsu baketsu = new Baketsu();
for (たくさん回る) {
...
hoge.piyo(baketsu);
...
}
という形にすれば、newは一度で済みます。
>AWTが返すDimensionの扱いで悩んだのはその判断でした。
上記の方法だと、バケツは呼び出し側の所有なので、変更すれば壊
れることは、呼び出し側はよく知っている話であって、悩まなくて
も済みそうです。
でも、これだと、まるっきりCの構造体渡しで、ちっともJavaっぽ
くないんですよねえ...
バケツのメンバはみんな実質publicにするんだろうし。
>java.lang.Stringのように、インスタンスが変更不可能なものは
>使いまわしても全く問題無いのですが。
そうですね。
------------------------------------------------------------
前橋 和弥 maebashi@xxxxxxxxxx
中部ソフトエンジニアリング(株)
〒450 名古屋市中村区名駅4-10-25(名駅IMAIビル 5F)
Tel:(052)583-4511(代) 内線 252 Fax:(052)583-4566
------------------------------------------------------------