プログラムメモ

ちょっとしたサンプルや備忘録的な何かをメモ。

eclipse mainメソッドの作成

最近コーディングしてなかったので、結構ひさびさ。
そして若干、無理やり書くこと探した、みたくなってる。

テスト用にmainメソッドを使いたいときにわざわざメソッドの定義を全て手打ちしてただんだけど
補完できることにようやく気付いた。

「main」って入力した後に「ctrl + space」押下。

候補の一番上に「main - mainメソッド」って出る。

こりゃ楽だ。

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

よくよく見てみると、サービスを再起動しなくてもこの設定を変更するだけで
メモリは解放されるみたい。

vmware player 立ち上がらない

VMWare PlayerからVMを起動しようとすると下記のエラーが発生。

「パワーオン中にエラーが発生しました:内部エラーが発生しました。」

プレイヤー起動のためのサービスが起動していないためらしい。

コンパネ→管理ツール→サービス
から
VMware Authorization Service
を起動で解決。

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。。。。。
そんな昔からあったんだ。