[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[jfriends-ml 12761] Re: 議事録「 Java 言語仕様第 3 版を読む会(第 7 回)」
高橋(徹)です。
昨日は読書会お疲れ様です。
さて、10月の議事録宿題の残りです。
> 【宿題】p.283のインタフェースのサンプルプログラムをバイトコードで見る
javapコマンドによるTestクラスのmainメソッドのディスアセンブル結果から
抜粋します。
System.out.println(J.i); の部分
3: iconst_1
4: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
定数1をオペランドスタックに積んで、printlnを呼んでいます。
System.out.println(K.j); の部分
10: getstatic #4; //Field K.j:I
13: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
クラスKのフィールドjを取得しオペランドスタックに積んでprintlnを呼んで
います。
> 【宿題】WeakReferenceとSoftReferenceの存在意義(違い)について解説をMLに投
> 稿せよ
> なぜこれらのクラスが導入されたか?
> どんなケースで役立つのか?
IBM developerWorksで公開されているGoetz氏の以下2つの記事がおおよその
回答になっています。
「Javaの理論と実践:弱参照でメモリー・リークを塞ぐ」
http://www.ibm.com/developerworks/jp/java/library/j-jtp11225/index.html
「Javaの理論と実践:ソフト参照でメモリー・リークを塞ぐ」
http://www.ibm.com/developerworks/jp/java/library/j-jtp01246/
> 12.6
> 【宿題】System.gc()を無効にするJavaVMオプションは?
-XX:+DisableExplicitGC
HotSpot VMに関するオプション一覧が以下URLにあります。
http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp
注)上記ページでは、-XX:-DisableExplicitGCと、+ではなく-で表記
されています。これはデフォルトが-(無効)ということなのか?
jinfoコマンドで指定したプロセスのJavaVMオプション指定状況を
調べる/変更することができます。(たまたま上記オプションを調べて
いたときに見つけました)
$ jinfo -flag DisableExplicitGC 1234
-XX:-DisableExplicitGC
注)1234は、実際にはプロセスIDを指定。jpsコマンドでJavaプログラムの
プロセスIDを調べられる
> 13.1
>
> 【宿題】アノテーションを付けた要素(クラス、フィールド、メソッド)について
> バイナリ表現(クラス形式)にどう属性として保存されるか?
javapコマンドを-verboseオプション付きで実行すると、
RuntimeVisibleAnnotationsという項目(属性)が表示されます。
メソッドにアノテーションを付けた場合、メソッド構造体の属性の1つに
RuntimeVisibleAnnotationsの属性名を持つ情報が付いていました。
クラスやメソッドの場合は確認していませんが、おそらくクラス属性や
メソッド属性の1つに同様に情報が付くものと思われます。
> →応用)デバッグコンパイルするとローカル変数名も保存されるが、どこに格納さ
> れるか?
これも、javapコマンドを-verboseオプション付きで実行すると
LocalVariableTableという項目(属性)がメソッド毎に表示されます。
> 13.4.21
> 【宿題】チェック例外を追加して既存バイナリと組合せて動作を試す
FileNotFoundExceptionをスローするメソッドを持つクラスを作成し、そのメ
ソッドを呼ぶ別クラス(main)を作成し、コンパイル・実行させます。
次に、FileNotFoundExceptionの他にSocketExceptionをthrows節に追加し、
このクラスだけ再コンパイルしてmainを実行したところ、エラーになること
なく実行は可能でした。