JavaTM Platform
Standard Ed. 6

java.lang.ref
クラス SoftReference<T>

java.lang.Object
  上位を拡張 java.lang.ref.Reference<T>
      上位を拡張 java.lang.ref.SoftReference<T>

public class SoftReference<T>
extends Reference<T>

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

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

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

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

導入されたバージョン:
1.2

コンストラクタの概要
SoftReference(T referent)
          指定されたオブジェクトを参照する新しいソフト参照を作成します。
SoftReference(T referent, ReferenceQueue<? super T> q)
          指定されたオブジェクトを参照し、指定されたキューに登録されている新しいソフト参照を作成します。
 
メソッドの概要
 T get()
          参照オブジェクトのリファレントを返します。
 
クラス java.lang.ref.Reference から継承されたメソッド
clear, enqueue, isEnqueued
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

SoftReference

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

パラメータ:
referent - 新しいソフト参照が参照するオブジェクト

SoftReference

public SoftReference(T referent,
                     ReferenceQueue<? super T> q)
指定されたオブジェクトを参照し、指定されたキューに登録されている新しいソフト参照を作成します。

パラメータ:
referent - 新しいソフト参照が参照するオブジェクト
q - 参照が登録されるキュー。登録が必要ない場合は null
メソッドの詳細

get

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

オーバーライド:
クラス Reference<T> 内の get
戻り値:
この参照が表すオブジェクト。 この参照オブジェクトがクリアされている場合は null

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。