top / index / prev / next / target / source

2001-11-15 diary: J2SE 1.3.1_01aを使い始めました

いがぴょん画像(小) 日記形式でつづる いがぴょんコラム ウェブページです。

old-v2

J2SE 1.3.1_01aを使い始めました

J2SE 1.3.1_01aにアップグレード , 別件ですが、HotSpotの 予想以上の最適化機能に驚く…

最近 SUN Java2 SDK SE 1.3.1_01aを使い始めました

1.3.1_01 を使っていたのを 1.3.1_01aに乗り換えてみました。スループット周りの強化とか コンソール画面のメモリリークバグ修正 (嫌な内容です)とかに惹かれて 使い始めました。… 特に問題は出ていません。そこそこ気に入り始めました。

気になった点は、セットアップに従っていってインストールすると IEのJavaVMを置き換えるという 画期的な機能が付属している事です。これは便利 (笑) これで 古くて使い物にならない Microsoft製 JavaVMを 『簡単に』最新版 JavaVMに置き換えることが可能になります。(IEの詳細設定タブに統合されている点も結構気に入りました) …ただし これにより JavaVMの起動速度は低下してしまう模様です。Javaアプレット搭載ページを開くとタスクトレイ右下に コーヒーカップアイコンが表示されます。これの起動に ちと時間がかかっている模様。NetscapeでJavaVM起動するときと同じ挙動です。もっと気になったのは Javaアプレットなページを複数のIEで開くと その数だけコーヒーカップアイコンが追加されて表示される点です。こ…これは どういう意味なんだろう。タスクマネージャで見ると IEって 窓の数だけプロセスが起動されるんですね。今 初めて知りました。なるほどそして その数だけ JavaVMもロードされる模様です。(ただし プロセスとしては IEの中というカウントである模様) これは メモリ搭載量の少ないパソコンでIEを使っている環境において JavaVM更新をかけると、ひどいことが起こりかねないという事を意味しています。古くて使い物にならないJavaVMを最新の版で置き換える事そのものは 大変素晴らしいことなのですけれども、副作用が起きないよう注意することも肝要ですね。

Java言語パフォーマンスネタ: 消えるコード

いわゆるデバッグ用コードの実行速度を計測するために 下記のようなコードを書いてみました。 Windows 2000上で SUN Java2 SDK SE 1.3.1_01a 国際化版 (J2SE 1.3.1_01a) で HotSpotありで実行しました。ところがどっこい、あんまり差異が出ません。これが HotSpotの実力か?

/**
 * 速度計測サンプル
 */
public class Sample
{
        public static final int LOOP_COUNT=100000000;

        public static void main(String[] args)
        {
                new Sample().process();
        }

        protected void process()
        {
                System.out.println("いわゆるデバッグ用コードの実行速度計測.");
                long lStart=System.currentTimeMillis();
                for(int iLoop=0;iLoop<LOOP_COUNT;iLoop++)
                {
                        // ここを変更する。
                        // 計測数値は Celleron 300MHz
                        //sample1();//4.547秒
                        //sample2();//4.707秒
                        //sample3();//4.567秒
                        //sample4();//4.747秒
                        //sample5();//4.717秒
                        //sample6();//4.747秒
                        sample7();//8.121秒
                }
                long lEnd=System.currentTimeMillis();
                java.text.DecimalFormat decFormat=new java.text.DecimalFormat("#,##0.000");
                System.out.println(decFormat.format(((double)lEnd-lStart)/1000)+"秒");
        }

        /**
         * 全くのコメント
         */
        public void sample1()
        {
                // System.out.println("なにかデバッグ文字列");
        }

        public void sample2()
        {
                if(false)System.out.println("なにかデバッグ文字列");
        }

        public static final boolean IS_DEBUG3=false;

        public void sample3()
        {
                if(IS_DEBUG3)System.out.println("なにかデバッグ文字列");
        }

        public boolean IS_DEBUG4=false;

        public void sample4()
        {
                if(IS_DEBUG4)System.out.println("なにかデバッグ文字列");
        }

        public boolean IS_DEBUG5=false;

        private boolean getIsDebug5()
        {
                return IS_DEBUG5;
        }

        public void sample5()
        {
                if(getIsDebug5())System.out.println("なにかデバッグ文字列");
        }

        public boolean IS_DEBUG6=false;

        private boolean getIsDebug6()
        {
                return IS_DEBUG6;
        }

        public void sample6()
        {
                if(getIsDebug6())System.out.println("なにか"+"デバッグ"+"文字列");
        }

        public boolean IS_DEBUG7=false;

        private boolean getIsDebug7()
        {
                return IS_DEBUG7;
        }

        public void debug7(String strMsg)
        {
                if(getIsDebug7())System.out.println(strMsg);
        }

        public void sample7()
        {
                debug7("なにか"+"デバッグ"+"文字列");
        }

}

HotSpot最適化範囲がここまでとは思えませんが…。なぜなのだろう。 *.class(バイトコード)を逆アセンブルしてみようかとも思いましたが、とりあえず時間が無いのとどれが気の利いた バイトコード・リバースツールかを知らないので、とりあえず割愛しました。愛用バイトコード・リバースツールなどありましたら、どなたか一言 ツッコミを入れて下さい。

21:30 ループの回数が根本的に少なすぎたという事に気づきました。ループ回数を大幅アップしました。そうすると 多少特徴が出てきました。なるほど、感慨深い数値だなぁ。(sample7以外はほとんど同数値なんです。意外だったです。)

typo

2001/11/16 結城浩さまから誤植ツッコミSubject: typo結城です。取り急ぎtypoです。 s/パーフォマンスネタ/パフォーマンス/ s/かつで飛ぶ取り落とす/かつて飛ぶ鳥落とす/ s/是非 共通かに/是非 共通化に/

----結城浩

ここからいがぴょんどうもありがとうございます。大変嬉しいです。さっそく修正いたしました。それにしても 沢山間違え過ぎだなぁ (苦笑)

世間のニュースから () 2001


この日記について