0

新しい JMM では、部分的に構築されたオブジェクトや、その最終フィールドの複数の値が表示されないことが保証されています。http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.5.2

私の質問は -

不変オブジェクト (すべてのフィールドが final として宣言されている)を逆シリアル化する場合、同じ最終保証が適用されますか?

http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.5.3

(アップデート)

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6379948 (逆シリアル化のバグ)

不変オブジェクト (すべてのフィールドが final として宣言されている)を複製する場合、同じ最終保証が適用されますか?

4

2 に答える 2

0

オブジェクトを逆シリアル化する場合、オブジェクトへの参照を取得できる唯一の方法は、逆シリアル化が完了して返された後です。その時点で、そのフィールドが割り当てられています。

一般に、不完全に初期化されたオブジェクトへの参照を取得する唯一の方法は、そのスーパークラス コンストラクターが参照をthis別のスレッドに渡す場合です。

でマークされていないデシリアライズされたオブジェクトのミュータブル フィールドの値がvolatile1 つの CPU のプロセッサ キャッシュにあり、メイン メモリにフラッシュされない可能性があるという懸念がある場合、私は実際に権限を持ってそれに答えることができませんが、保証は、コンストラクターを実行する場合と同じではありませんでした。

于 2013-07-12T00:12:59.200 に答える