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]