java StringBuffer/StringBuilder
StringBufferとStringBuilderでほぼ同等の機能を備えた2つだけど
StringBuilderを使うことがあまりなかった。
というのも、具体的なメリットをあまり感じられなかったから。
両者の違いはスレッドセーフの有無
すなわちsynchronizedであるかどうか、ということ。
正直、そんな違わないでしょ、っていうのもあったり。。。
ってなわけで、ちょっと計測。
同一回数のappendでどの程度時間に差が発生するか?
以下、ソース。
import java.util.Random;
public class SpeedTest {
public static void main(String[] args) {
System.out.println("start testBuffer");
testBuffer();
System.out.println("start testBuilder");
testBuilder();
}
static final int roopCount = 10000000;
static void testBuffer() {
long begin = System.currentTimeMillis();
StringBuffer buf = new StringBuffer();
Random rnd = new Random();
for (int i = 0 ; i < roopCount ; ++i) {
buf.append(rnd.nextInt(9));
}
long end = System.currentTimeMillis();
System.out.println(end - begin);
}
static void testBuilder() {
long begin = System.currentTimeMillis();
StringBuilder buf = new StringBuilder();
Random rnd = new Random();
for (int i = 0 ; i < roopCount ; ++i) {
buf.append(rnd.nextInt(9));
}
long end = System.currentTimeMillis();
System.out.println(end - begin);
}
}
結果は・・・・・・・
start testBuffer
425
start testBuilder
331
ループ回数を色々変えてやってみても、だいたい割合は同じくらい。
75%くらい早くなる。
synchronizedってこんなに遅いんだ、と実感。
sql server メモリを使いすぎる
DBがSQL Serverのシステムで「メモリうんぬん」のエラーが発生。
C/Sのシステムだったので、クライアント側のメモリが原因かと思いきや
原因はサーバ側のメモリが不足していたことでした。
SQL Serverは使ったメモリを解放しないらしい。
ということで、いったん再起動し、SQL Serverの使用可能メモリを2Gへ抑える。
(サーバの搭載メモリは16G)
やり方はこちらのサイトを参考
http://blog.livedoor.jp/toaru_se/archives/28515706.html
よくよく見てみると、サービスを再起動しなくてもこの設定を変更するだけで
メモリは解放されるみたい。
eclipse 実行のショートカット
mainメソッドとか開発中に頻繁に実行することがある場合
いちいちツールバーの実行とかメソッドを右クリックして実行とかやってたけど
ついにショートカットを発見。
Shift + Alt + X, J
まあ、発見っていうか、コンテキストメニューに書いてあったんだけどね。
いままで全く見てませんでした。
使いこなせるとかなり効率アップ!なはず。。
java poi 3.10
久々にPOIを触ったけど、ちょっと便利になってる。
foreachでsheetとrowとcellが回せるようになってる。
for (Sheet sheet : book)
for (Row row : sheet)
for (Cell cell : row)
ちなみにこのクラス達のパッケージはこれ。
org.apache.poi.ss.usermodel
いまさら知ったんだけど、Iterableなるものがあってそれを実装するとforeachで回せるみたい。
since 1.5。。。。。
そんな昔からあったんだ。
sql server 文字列置換
replace(置換処理対象文字列, 置換対象文字列, 置換文字列)
なんのこっちゃ。
実行
replace('abcdefghi', 'c', 'z')
結果
abzdefghi
ってこと。