サーチ…


異なる参照型

java.lang.refパッケージは、ガベージコレクタとの限定された相互作用をサポートする参照オブジェクトクラスを提供します。

Javaには4つの主な異なる参照型があります。彼らです:

  • 強い参照
  • 弱い参照
  • ソフトリファレンス
  • ファントムリファレンス

1.強い参照

これは、オブジェクトを作成する通常の形式です。

MyObject myObject = new MyObject();

変数ホルダーは作成されたオブジェクトへの強い参照を保持しています。この変数がMyObjectこの値を保持している限り、 MyObjectインスタンスはガベージコレクタによって収集されません。

2.弱い参照

オブジェクトを長くしたくない場合や、できるだけ早くオブジェクトに割り当てられたメモリをクリア/フリーにする必要がある場合は、そうする方法があります。

WeakReference myObjectRef = new WeakReference(MyObject);

単純に、弱参照とは、オブジェクトを強制的にメモリに残すように強くない参照です。弱い参照は、ガベージコレクタの能力を利用して到達可能性を判断できるため、自分で行う必要はありません。

作成したオブジェクトが必要な場合は、 .get()メソッドを使用して.get()

myObjectRef.get();

以下のコードはこれを例示します:

WeakReference myObjectRef = new WeakReference(MyObject);
System.out.println(myObjectRef.get()); // This will print the object reference address
System.gc();
System.out.println(myObjectRef.get()); // This will print 'null' if the GC cleaned up the object

3.ソフトリファレンス

ソフトリファレンスは弱リファレンスよりもわずかに強力です。次のように、ソフト参照オブジェクトを作成することができます。

SoftReference myObjectRef = new SoftReference(MyObject);

彼らは弱い参照よりも強くメモリに保持することができます。十分なメモリ供給/リソースがあれば、ガベージコレクタは弱い参照として熱心にソフトリファレンスをクリーンアップしません。

ソフトリファレンスはキャッシュに使用すると便利です。ソフトリファレンスオブジェクトをキャッシュとして作成し、メモリがなくなるまで保持することができます。メモリが十分なリソースを供給できない場合、ガベージコレクタはソフトリファレンスを削除します。

SoftReference myObjectRef = new SoftReference(MyObject);
System.out.println(myObjectRef.get()); // This will print the reference address of the Object
System.gc();
System.out.println(myObjectRef.get()); // This may or may not print the reference address of the Object

4.ファントム・リファレンス

これは最も弱い参照型です。 Phantom Referenceを使用してオブジェクト参照を作成した場合、 get()メソッドは常にnullを返します。

この参照の使用は、「コレクタがその指示対象を再利用できると判断した後にエンキューされるファントム参照オブジェクト」です。ファントム参照は、プリコーミングクリーンアップアクションのスケジューリングに最も頻繁に使用されます。 Javaのファイナライズの仕組み " - オントロジーのPhantom Reference Javadocより。

次のように、Phantom Referenceのオブジェクトを作成できます。

PhantomReference myObjectRef = new PhantomReference(MyObject);


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow