Java の参照オブジェクトの要点と、ソフト参照オブジェクト、ウィーク参照オブジェクト、およびファントム参照オブジェクトの基本的な違いを理解しました。
ただし、APIドキュメントから次の点を完全には理解していません
WeakReference<T>の API ドキュメントから:
「参照先がfinalizable、finalized、およびreclaimedになることを妨げない弱い参照オブジェクト。」
現在、太字の用語は API ドキュメントのどこにも説明されていないため、特に多かれ少なかれ廃止された
Object.finalize()
メソッドのファイナライズの概念に関連して、それらが正確に何を意味するのか疑問に思います。Reference<T>の API ドキュメントから:
public void clear()
: "このメソッドはJava コードによってのみ呼び出されます。ガベージ コレクターが参照をクリアするときは、このメソッドを呼び出さずに直接実行します。"public boolean enqueue()
: "このメソッドはJava コードによってのみ呼び出されます。ガベージ コレクターが参照をエンキューするときは、このメソッドを呼び出さずに直接実行します。"繰り返しますが、上記の 2 つの引用符の「Java コード」が何を意味するのかわかりません: The JVM internal code which I have no access? または、読み取り専用/閲覧アクセス権を持つ JDK コードですか? それとも、エンドユーザー自身の Java コードですか?
「このメソッドを呼び出さずに直接」の部分は、JVM がこれらのメソッドを呼び出す必要がないことを示しています。一方、「Java コードのみ」の部分は、それがエンド ユーザーの Java コードではなく、JVM のものであることを示しています (エンド ユーザー コードを意味する場合、このフレーズは、すべての Java クラスのほぼすべてのメソッドの API ドキュメント!)。では、どの解釈が正しく、誰がこの関数を呼び出すことができるのでしょうか?