モジュール java.base
パッケージ java.lang.ref

クラスSoftReference<T>


  • public class SoftReference<T>
    extends Reference<T>
    メモリー要求に応じてガベージ・コレクタの判断でクリアされるソフト参照オブジェクトです。 ソフト参照は通常、メモリー・センシティブなキャッシュを実装するために使用されます。

    ある時点で、オブジェクトがソフト到達可能であると、ガベージ・コレクタが判断したとします。 その時点で、ガベージ・コレクタは、そのオブジェクトへのソフト参照すべてと、強参照のチェーンを経由してそのオブジェクトに到達できるような、ソフト到達可能なほかのオブジェクトへのソフト参照すべてを原子的にクリアすることを選択できます。 同時にまたはあとで、ガベージ・コレクタは、参照キューに登録されているそれらの新しくクリアされたソフト参照をキューに入れます。

    ソフト到達可能なオブジェクトへのすべてのソフト参照は、仮想マシンがOutOfMemoryErrorをスローする前にクリアされていることが保証されています。 そうでない場合、ソフト参照がクリアされる時点、またはさまざまなオブジェクトへの一連のソフト参照がクリアされる順序に制約はありません。 ただし、仮想マシンの実装は、最近作成されたソフト参照または最近使用されたソフト参照をクリアしないことが奨励されます。

    このクラスの直接のインスタンスは、単純なキャッシュを実装するために使用できます。このクラスまたは派生したサブクラスは、より洗練されたキャッシュを実装するために、もっと大きなデータ構造でも使用できます。 ソフト参照のリファレントが強到達可能であるかぎり、つまり実際に使用されているかぎり、ソフト参照はクリアされません。 このため、たとえば洗練されたキャッシュは、エントリへの強いリファレントを維持することで、もっとも新しく使用されたエントリが破棄されることを防ぎ、ほかのエントリはガベージ・コレクタの判断で破棄されるようにできます。

    導入されたバージョン:
    1.2
    • コンストラクタの詳細

      • SoftReference

        public SoftReference​(T referent)
        指定されたオブジェクトを参照する新しいソフト参照を作成します。 新しい参照は、どのキューにも登録されません。
        パラメータ:
        referent - 新しいソフト参照が参照するオブジェクト
      • SoftReference

        public SoftReference​(T referent,
                             ReferenceQueue<? super T> q)
        指定されたオブジェクトを参照し、指定されたキューに登録されている新しいソフト参照を作成します。
        パラメータ:
        referent - 新しいソフト参照が参照するオブジェクト
        q - 参照が登録されるキュー。登録が必要ない場合はnull
    • メソッドの詳細

      • get

        public T get()
        参照オブジェクトのリファレントを返します。 プログラムまたはガベージ・コレクタによって、この参照オブジェクトがすでにクリアされている場合、このメソッドはnullを返します。
        オーバーライド:
        get、クラス: Reference<T>
        戻り値:
        この参照が表すオブジェクト。この参照オブジェクトがクリアされている場合はnull