[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
------------------------------------------------------------