Java Language
参照型
サーチ…
異なる参照型
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);