Java のさまざまなタイプの参照 (強い、弱い、弱い、ファントム) に関するこの記事を読みましたが、よくわかりません。
これらの参照型の違いは何ですか? また、各型はいつ使用されますか?
Java のさまざまなタイプの参照 (強い、弱い、弱い、ファントム) に関するこの記事を読みましたが、よくわかりません。
これらの参照型の違いは何ですか? また、各型はいつ使用されますか?
弱参照:
弱参照とは、簡単に言えば、オブジェクトを強制的にメモリに残すほど強力ではない参照です。弱参照を使用すると、ガベージコレクターの機能を利用して到達可能性を判断できるため、自分で行う必要はありません。
ソフトリファレンス:
ソフト参照は、参照先のオブジェクトを破棄することにそれほど熱心でないことを除けば、弱参照とまったく同じです。到達可能性が低いオブジェクト(最も強い参照はWeakReferences)は、次のガベージコレクションサイクルで破棄されますが、到達可能性が低いオブジェクトは、通常、しばらくの間存続します。
ファントムリファレンス:
ファントム参照は、SoftReferenceまたはWeakReferenceとはまったく異なります。オブジェクトに対するグリップが非常に弱いため、オブジェクトを取得することさえできません。get()メソッドは常にnullを返します。このような参照の唯一の用途は、参照が参照キューにエンキューされるタイミングを追跡することです。その時点で、参照先のオブジェクトが停止していることがわかります。
このテキストは、https ://weblogs.java.net/blog/2006/05/04/understanding-weak-referencesから抽出されました。
との単純な違いはSoftReference
、Android DeveloperWeakReference
によって提供されます。
SoftReference
aと aの違いはWeakReference
、参照をクリアしてキューに入れる決定が行われる時点です。
は、VM がメモリ不足になる危険性があるSoftReference
場合に備えて、できるだけ遅くクリアしてキューに入れる必要があります。
AWeakReference
は、弱い参照であることが判明するとすぐにクリアされ、キューに入れられます。
あなたが使用した 3 つの用語は、主にガベージ コレクションを取得するオブジェクトの適格性に関連しています。
弱い参照:: オブジェクトを強制的にメモリに残すほど強くない参照です。ガベージ コレクションのためにそのオブジェクトを収集する のはガベージ コレクターの気まぐれです。その GC がそれを収集しないように強制することはできません。
ソフト参照:: 弱い参照とほぼ同じです。ただし、ガベージ コレクションからの弱参照よりもオブジェクトを少し強く保持していると言えます。
ガベージ コレクターが最初のライフ サイクル自体で弱参照を収集する場合、ガベージ コレクションの次のサイクルでソフト参照を収集します。
強力な参照:: 上記の 2 種類の参照とは正反対です。ガベージ コレクションを収集することはあまりありません (ほとんどの場合、収集されません)。
詳細については、次のリンクを参照してください。
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/ref/Reference.html
参照の 4 度 -Strong, Weak, Soft, Phantom
Strong - 一種の参照であり、参照されたオブジェクトを GC の対象外にします。ビルダー クラス。例 - StringBuilder
弱い - GC の対象となるリファレンスです。
ソフト - メモリが使用可能になるまでオブジェクトが GC の対象となる一種の参照です。画像キャッシュに最適です。メモリが使用可能になるまで保持されます。
ファントム - オブジェクトが直接 GC の対象となる一種の参照です。オブジェクトがいつメモリから削除されたかを知るためにのみ使用されます。
用途:
オブジェクトがメモリから正確に削除された時期を特定できます。
メソッドが
finalize()
オーバーロードされると、GC が 2 つのクラスの GC 対象オブジェクトに対してタイムリーに行われない可能性があります。したがって、ファントム参照により、ヒープのほとんどがガベージであってもOutOfMemoryErrorsfinalize()
を取得できるのは、の前に GC の対象になります。
弱参照は、キャッシュ モジュールを実装するのに理想的です。