[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を実行したところ、エラーになること
なく実行は可能でした。