Javaでのファントム参照
1. 概要
この記事では、Java言語でのファントムリファレンスの概念について説明します。
2. ファントムリファレンス
3. ユースケース
それらが使用される2つの一般的なユースケースがあります。
最初の手法はto determine when an object was removed from the memoryで、これはメモリに敏感なタスクをスケジュールするのに役立ちます。 たとえば、大きなオブジェクトが削除されるのを待ってから、別のオブジェクトをロードできます。
2番目の方法はto avoid using the finalize method and improve thefinalization processです。
3.1. 例
次に、この種の参照がどのように機能するかを実際に理解するために、2番目のユースケースを実装しましょう。
まず、リソースをクリアするためのメソッドを定義するために、PhantomReferenceクラスのサブクラスが必要です。
public class LargeObjectFinalizer extends PhantomReference
次に、強化されたきめ細かいファイナライズを作成します。
ReferenceQueue
まず、必要なすべてのオブジェクトを初期化します。referenceQueue –キューに入れられた参照を追跡するため、references –後でクリーニング作業を実行するため、largeObjects –大きなデータ構造を模倣するため。
次に、ObjectクラスとLargeObjectFinalizerクラスを使用してこれらのオブジェクトを作成します。
ガベージコレクターを呼び出す前に、largeObjectsリストを逆参照することにより、大量のデータを手動で解放します。 Runtime.getRuntime().gc()ステートメントのショートカットを使用してガベージコレクターを呼び出したことに注意してください。
System.gc()がガベージコレクションをすぐにトリガーしないことを知っておくことが重要です。これは、JVMがプロセスをトリガーするための単なるヒントです。
forループは、すべての参照がキューに入れられていることを確認する方法を示しています。各参照のtrueが出力されます。
最後に、whileループを使用して、キューに入れられた参照をポーリングし、それぞれのクリーニング作業を実行しました。
4. 結論
このクイックチュートリアルでは、Javaのファントムリファレンスを紹介しました。
これらが何であるか、そしてそれらがいくつかの単純で要点のある例でどのように役立つかを学びました。