[前][次][番号順一覧][スレッド一覧]

mysql:9645

From: Murayama Toshikiyo <Murayama Toshikiyo <murayama@xxxxxxxxxx>>
Date: Tue, 15 Jun 2004 10:24:54 +0900
Subject: [mysql 09645] Re: Insert 毎に接続・切断を繰り返すと不特定な場所でエラーが発生する。

村山@NETGENEです.

> あまりエラー内容と関係がないかもしれないのですが一応気になったのは

中略

> Javaにおいてループ内で変数を宣言してしまうと、そのたびに新たなメモリ領域が確
> 保されてしまうはずので、この場合ですとこのStringBufferでかなりメモリが食われ
> ているんじゃないかと思います。
たしかにその可能性はあります.

> 一応、ブロックから抜ければ次のガーベジコレクションの対象にはなりますが、明示
> 的にGCをしない限りいつメモリから開放されるかはJVM任せになってしまいます。
この場合に明示的にSystem.gc()を呼び出すのは誤りです.
http://www.netgene.co.jp/java/technicalTerms.html#GCSystemGc

> なので私だったらここは
> 
>     StringBuffer buf = null;
>     String ip = null;
>     for (int i = 0; i < 256; i++) {
>       for (int j = 0; j < 256; j++) {
>         for (int k = 0; k < 256; k++) {
>           for (int l = 0; l < 256; l++) {
>             buf = new StringBuffer();
>             buf.append(i).append(COMMA).append(j).append(COMMA);
>             buf.append(k).append(COMMA).append(l);
>             ip = buf.toString();
>             System.out.println("ip = " + ip);
>             insert(ip);
>           }
>           showStatus();
>         }
>       }
>     }
> 
> という風に実装するほうがいいのではないかなー、と。

Javaで問題になるとすれば

>     StringBuffer buf = null;

の方ではなく,むしろ

>             buf = new StringBuffer();

の方です.ループから出すとすればこちらの方を出すべきです.

前者はローカル変数領域やオペランドスタックに一ワード確保するだけで,
再利用も容易です.(そもそもGCで回収されるわけでもない.)
http://www.netgene.co.jp/java/docs/javaPressVol15.html#2_2

後者はStringBufferインスタンスをヒープ領域に確保します.回収は通常GCが
使われます.
http://www.netgene.co.jp/java/docs/javaPressVol17.html#2

ただし後者の場合でも世代別GCの若い世代のGCで回収されるので,効率はかなり
いいはずです.また実行時最適化により,より効率の良いコードが生成されている
可能性もあります.通常はあまり気にする必要はないでしょう.
#これはJavaの最適化に関する決り文句です.この言葉で締めくくれば,
#ほとんどの場合は問題ありません.(^^;

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



[前][次][番号順一覧][スレッド一覧]

      9640 2004-06-14 20:23 ["Kageyama Takahiro" ] Insert 毎に接続・切断を繰り返すと不特定な場所でエラーが発生する。
      9641 2004-06-14 20:59 ┣[ML account <ml@xxxxx]                                       
      9642 2004-06-14 21:31 ┣["Haruki Nakayama" <h]                                       
->    9645 2004-06-15 10:24 ┃┗[Murayama Toshikiyo <]                                     
      9643 2004-06-14 23:42 ┣[<oouchi@xxxxxxxxxx> ]                                       
      9644 2004-06-15 00:01 ┃┗[<oouchi@xxxxxxxxxx> ]                                     
      9651 2004-06-15 18:21 ┗[<yasuyuki@xxxxxxxxxx]                                       
      9652 2004-06-15 19:00  ┣["HIROSE, Masaaki" <h]                                     
      9654 2004-06-15 19:29  ┃┗[ML account <ml@xxxxx]                                   
      9658 2004-06-16 01:47  ┃ ┗["HIROSE, Masaaki" <h]                                 
      9655 2004-06-15 19:42  ┗[seiji takegata <take]