Java の 4 つの参照型の詳細な紹介

黄舟
リリース: 2017-03-18 13:56:51
オリジナル
2019 人が閲覧しました

机上ではやっと気づいたけど、詳しくやらないといけないのは分かっている --Lu You流水源があるように運河がどのくらい澄んでいるか尋ねてください --Zhu Xi

Java はバージョン 1.2 から4 種類の参照とレベルを導入しましたこれら 4 つの参照は高いものから低いものへと順番に並んでいます:強い参照>ソフト参照>弱い参照>ダミー参照

1. 強参照:

強参照は、最も一般的に使用される参照です。通常、オブジェクトを初期化すると、それは強参照になります。オブジェクトに強参照がある場合、JVM はそれをガベージ コレクションしません。メモリが不足している場合、強参照を再利用するのではなく、OutofMemoryError をスローしてプログラムを異常終了させます。

2. ソフトリファレンス:

オブジェクトが弱参照の場合、メモリが十分であれば、メモリ空間が不十分な場合はガベージコレクションされず、オブジェクトのこの部分はリサイクルされます。 。ガベージ コレクターがそれを再利用しない限り、プログラムはそれを使用できます。ソフト参照を使用して、メモリに依存するキャッシュを実装できます。ソフト参照は、参照キュー (ReferenceQueue) と組み合わせて使用できます。ソフト参照によって参照されるオブジェクトがガベージ コレクターによってリサイクルされる場合、Java 仮想マシンは、それに関連付けられた参照キューにソフト参照を追加します。

3. 弱参照:

弱参照とソフト参照の違いは、弱参照のライフサイクルが短いことです。ガベージ コレクターがメモリ領域をスキャンすると、弱い参照が見つかるたびにメモリ領域がリサイクルされます。ただし、ガベージ コレクターは比較的優先度の低いスレッドであるため、必ずしもこれらの弱い参照オブジェクトをすぐに見つけられるとは限りません。弱参照は参照キュー (ReferenceQueue) と組み合わせて使用できます。弱参照によって参照されるオブジェクトがガベージ コレクションされる場合、Java 仮想マシンは関連する参照キューに弱参照を追加します。

4. ファントム参照:

他の参照とは異なり、ファントム参照はオブジェクトのライフサイクルを決定しません。オブジェクトがファントム参照のみを保持している場合、オブジェクトは参照がないかのようにガベージ コレクターによっていつでも回収される可能性があります。仮想参照は主に、ガベージ コレクターによってリサイクルされるオブジェクトのアクティビティを追跡するために使用されます。仮想参照、ソフト参照、弱参照の違いの 1 つは、仮想参照は参照キュー (ReferenceQueue) と組み合わせて使用する必要があることです。ガベージ コレクターがオブジェクトをリサイクルする準備をしているときに、オブジェクトにまだ仮想参照があることが判明すると、オブジェクトのメモリを再利用する前にその仮想参照をオブジェクトに追加します。 関連する参照キュー内。

サンプルコード:

強参照:

public class MyClass { MyClass() { } }public class Test { public static void main(String [] args) { MyClass myClass=new MyClass(); System.gc(); } }
ログイン後にコピー

ガベージコレクションは明示的に呼び出されますが、myClassは強参照であるため、myClassはリサイクルされません。

ソフトリファレンス:

public class MyClass { MyClass() { } }public class Test { public static void main(String [] args) { MyClass myClass=new MyClass(); SoftReference ref=new SoftReference(myClass); System.gc(); } }
ログイン後にコピー

ソフトリファレンスは、メモリが不足している場合に再利用されます。

弱い参照:

public class MyClass { MyClass() { } }public class Test { public static void main(String [] args) { MyClass myClass=new MyClass(); WeakReference ref=new WeakReference(myClass); System.gc(); } }
ログイン後にコピー

JVM ガベージ コレクション中に、弱い参照はリサイクルされます。

仮想参照:

public class MyClass { MyClass() { } }public class Test { public static void main(String [] args) { MyClass myClass=new MyClass(); ReferenceQueue rq=new ReferenceQueue(); PhantomReference pr=new PhantomReference(myClass,rq); System.gc(); } }
ログイン後にコピー

仮想参照はインスタンス化された後にリサイクルされます。

概要:

オブジェクトの一般的な状態 単純なオブジェクト?キャッシュ オブジェクトキャッシュ

レベル

いつガベージコレクションが行われますか?生き残る時間

強い言葉

決して

JVM の実行が停止すると終了

ソフト参照

メモリ不足の場合

メモリ不足による終了

弱参照

ガベージコレクションについて

gc が実行後に終了しました

仮想参照

不明

不明

不明

関連記事:

Javaでの詳細な比較基本型変数と参照型変数

Javaにおける参照型の概念の分析

JavaScriptにおける基本データ型と参照型の違いについて詳しく説明

以上がJava の 4 つの参照型の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!