Class
Javaオブジェクトがガベージ コレクションされるタイミングを教えてくれる人がいるかどうか疑問に思っていました。Map<Class<?>, Class<?>[]>
私の使用例は、オブジェクトのクラス階層を保持するキャッシュ ( ) です。
例えば:
の (短い) 階層はString.class
(降順): String.class
->になりObject.class
ます。このタイプの有効なキャッシュ エントリは[KEY: String.class, VALUE: {String.class, Object.class}]
.
String.class
String.class はガベージ コレクションする必要があるため、これは悪い例だと思います。
私が取り組んでいるシリアル化プロジェクトには、このキャッシュが必要です。オブジェクトを作成するとき、システムは正しい「コーデック (シリアライザー)」を選択するために、このオブジェクトの階層を必要とします。各オブジェクトの階層を収集すると、不要なオーバーヘッドが発生します。しかし、その後、メモリリークについて考えました。おそらく、クラスオブジェクトはガベージコレクションされる可能性があります(これはわかりません)が、キャッシュで強い参照を使用している場合は機能しません。
WeakHashMap で十分だと思いますか? または、次のようなものを使用する必要がありますか:
Map<WeakReference<Class<?>>, WeakReference<Class<?>>[]> ?
この問題についてどう思いますか。