読書会(Java 2 Standard Edition 5.0 Tiger)第4回議事録
[ 戻る ]
2005年12月17日 土曜日
「 Java 2 Standard Edition 5.0 Tiger 」を読む会第4回 読書会議事録
高橋(徹) 高橋(智) 小棚木 奥 岩室 村山 遠藤 和田
門脇 吉本 金井 濱口 石黒 根本(書記)
■9.6 メモリモデル より (p131)
■9.6.1 ts.start()... ts.join() で呼んだ先のコードの完了と、
呼んだ側のmainスレッドは完了の順序性は保証されていない。
2CPUマシンでなら現象の再現可能らしい。 再現テストは宿題。
class ThreadSynchronization extends Thread {
private int x;
public ThreadSynchronization(int x) { this.x = x; }
public void run() {
System.out.println("run: x = " + x);
x = 2;
}
public int getX() { return x; }
public static void main(String[] args) throws InterruptedException {
ThreadSynchronization ts = new ThreadSynchronization(1);
ts.start();
ts.join();
System.out.println("main: x = " + ts.getX());
}
}
■volatileの変数の読み書きをマルチスレッドでやると、どの程度遅くなるのか? 宿
題
■9.6.2 final宣言されたフィールド
final宣言されていればTigerではフィールドの普遍性が保証されるようになった。
1.4 までは実は保証されていなかった。
オブジェクトクラス生成時はフィールドに0がセットされ、次に初期値がセット
されるので、参照の食い違いが起きる。
コンストラクターが終わらないと、周りからは参照はできないので、その問題は起
きない。
■9.7 型によるプログラミング
toString(boolean)の用途は?
プロパティファイルにbooleanを書くとき
表のフィールドの一つがbooleanの時、そこでもソート可能
JTableはエクセルの代わりに使おうとすると大変
■9.7.2 loestOneBit(int i) これは何に使うのか
bug parade かrequest for enhancement を要調査
reverseBytes(inti ) は endian変換の為のものの気がする。
「ハッカーのたのしみ」副読本として、もともとの書き方を参考にすると良い。
NaN =Not a Number = -∞, ∞
IEEE754 の表記で 仮数部 指数部の組で表記可能。
getDirectionarity(char ch) とは、文字を右から書くか、左から書くかのこと
日本語を入れて試してみましょう。
isMirrored(char ch) 日本語の 「」や『』のような対応括弧も
検出可能か試してみましょう。
αの全角半角表記問題のように何か落とし穴ないのか?
Unicode 4.0は最大4byteになる。
基本多言語プレーンとは UCS-2で表現可能な空間のこと
■9.7.5 Classクラス
public boolean isSynthetic()
合成クラス(Synthetic class)とは、何か?
単純なinner classは合成とは答えない。 宿題
enumの継承クラスでもtrueとはならない。
getName()とgetCanonicalName() とは何か
■9.7.6 Fieldクラス
public boolean isSynthetic()はコバリアントなfieldであるどうかを確認する。
■9.7.7 Mehodクラス
getGenericReturnType() の返す実際の型パラメータは、Typeクラスを返す。
■9.8 ガーベッジコリクションとメモリ
■9.9 ドキュメンテーションコメント
「直列化された形式」とは? そういうjavadocがある。
パッケージドキュメント
package.html --> package-info.java となったことでAnnotationの
説明に使用できるようになった
■9.10.3 printfメソッド
printfメソッドと formantメソッド の違いは? 同じ事ができるように見える。
printfは毎回フォーマットが掛かるので遅い。どの程度遅いのか 宿
題
■9.10.4 オブジェクトのシリアライズ
readObject は古いversionのjdkで生成したシリアライズオブジェクトも
読めなくてはならないという強い縛りがあるので、サポートが大変。
■9.11 コレクション
O(1)とは?
O(1) = order 1 コレクション数が増えても、
個々へのアクセス速度は変わらないという意味
O(n) = linklist のようなものはn個あれば、その分増加する
PriorityQueueクラスはスレッドセーフではないのでPriorityBlockingQueue
などを使用してスレッドセーフなアクセスをしなくてはならない。
"Java Threading third edition" にこのあたりの記述は載っている。
■9.12.4 MathクラスとStrictMathクラス
StrictMathクラスは、異なったマシン同士で浮動小数点のをキーとした
暗号化ファイルの受け渡しなどには、MathではなくStrictMathで計算結果の
精度の一致を図りたいときに使う。 らしい 、 宿題
■9.13.1 Systemクラス
currentMilsec() よりはnanoTime()の方が正確にはなりうる。
■9.13.4 java.langの新たなサブパッケージ
javax.management = JMXの本体
java.lang.managemet = 管理する側
以上
[ 戻る ]