StudentRegistrarクラスをインスタンス化するときに、以下のコードは何をしますか?Java初期化の質問
public class StudentRegistrar
{
public StudentRegistrar();
{
new RecordManager().Initialize();
}
}
StudentRegistrarクラスをインスタンス化するときに、以下のコードは何をしますか?Java初期化の質問
public class StudentRegistrar
{
public StudentRegistrar();
{
new RecordManager().Initialize();
}
}
にコンパイルされません。 Initialize()
は、RecordManager
への参照を保持できる新しいスレッドを生成することができます。新しいスレッドはガベージコレクションルートであるため、RecordManager
参照はそのルートから到達可能であるため、クリーンアップされません。
これは実際にはInitialize
の機能に依存します。
は、RecordManager
のインスタンスを作成Initialize()
メソッドを呼び出し、次にRecordManager
のインスタンスを破壊します。
編集:実は、それはそれは必要なすぐにRecordManager
を破壊しないため、スプリアス;
* RecordManagerのインスタンスを破棄する*を*に置き換える必要がありますRecordManagerのインスタンスをGarbage Collectionで使用できるようにします* –
@Sean破棄という用語は間違っていますが、ガベージコレクションで利用できるようになっている初期化関数がRecordManagerインスタンスへの強い参照またはソフト参照を維持するオブジェクトを作成しない場合にのみ当てはまります。 sjrの応答は技術的に正確です。 – LINEMAN78
@ LINEMAN78 sjrは多くの仮定をしています。どちらの答えが正しいかは、誰が正しいと仮定しているかによって異なります –