検索
ホームページJava&#&チュートリアルJava オブジェクトの強い参照、弱い参照、弱い参照、および仮想参照 +ReferenceQueue

Java オブジェクトの強参照、ソフト参照、弱参照、仮想参照 +ReferenceQueue

1. 強参照 (StrongReference)

強参照は最も一般的に使用される参照です。オブジェクトに強い参照がある場合、ガベージ コレクターはそれを再利用しません。メモリ領域が不十分な場合、Java 仮想マシンは、メモリ不足の問題を解決するために強参照を持つオブジェクトを恣意的にリサイクルするのではなく、OutOfMemoryError エラーをスローしてプログラムを異常終了させます。

2. ソフト参照

オブジェクトにソフト参照のみがある場合、メモリ空間は十分であり、メモリ空間が不十分な場合は、ガベージ コレクターはそれを再利用しません。ガベージ コレクターがオブジェクトを収集しない限り、オブジェクトはプログラムで使用できます。ソフト参照を使用して、メモリ依存のキャッシュを実装できます (例を以下に示します)。

ソフト参照は、参照キュー (ReferenceQueue) と組み合わせて使用​​できます。ソフト参照によって参照されるオブジェクトがガベージ コレクターによってリサイクルされる場合、Java 仮想マシンは、それに関連付けられた参照キューにソフト参照を追加します。

3. 弱参照

弱参照とソフト参照の違いは、弱参照のみを持つオブジェクトのライフサイクルが短いことです。ガベージ コレクター スレッドがその管轄下のメモリ領域をスキャンするプロセス中に、弱い参照のみを持つオブジェクトが見つかると、現在のメモリ領域が十分であるかどうかに関係なく、そのメモリが再利用されます。ただし、ガベージ コレクターは優先度が非常に低いスレッドであるため、弱い参照のみを持つオブジェクトを必ずしもすぐに見つけられるとは限りません。

弱参照は参照キュー (ReferenceQueue) と組み合わせて使用​​できます。弱参照によって参照されるオブジェクトがガベージ コレクションされる場合、Java 仮想マシンは関連する参照キューに弱参照を追加します。

4. ファントム参照 (Phantom Reference)

名前が示すように、「ファントム参照」は名前だけであり、他の参照とは異なり、オブジェクトのライフサイクルを決定しません。オブジェクトがファントム参照のみを保持している場合、オブジェクトは参照がないかのようにガベージ コレクターによっていつでも再利用される可能性があります。

仮想参照は主に、ガベージ コレクターによってリサイクルされるオブジェクトのアクティビティを追跡するために使用されます。仮想参照、ソフト参照、弱参照の違いの 1 つは、仮想参照は参照キュー (ReferenceQueue) と組み合わせて使用​​する必要があることです。ガベージ コレクターがオブジェクトをリサイクルする準備をしているときに、オブジェクトにまだ仮想参照があることが判明すると、オブジェクトのメモリをリサイクルする前に、それに関連付けられた参照キューに仮想参照を追加します。

  1. ReferenceQueue queue = newReferenceQueue ();

  2. PhantomReference pr = newPhantomReference (object, queue);参照キューがすでに作成されているかどうかを判断します。仮想参照は、参照されたオブジェクトがガベージ コレクションされるかどうかを学習するために使用されます。プログラムは、仮想参照が参照キューに追加されたことを検出すると、参照されたオブジェクトのメモリが再利用される前に必要なアクションを実行できます。

    5. ReferenceQueue
Reference オブジェクト自体が保存されている場合、Reference 参照が指すオブジェクトが GC によってリサイクルされている場合、その Reference は実際には無効になります

このような Reference が置かれます。スペースの占有を避けるために、ここでクリアすることができます

6. WeakHashMap

弱参照マップ: Key キーがマップ内の値を取得した後に再利用される場合、Key キーは弱参照キーになります。 、値は自動的に削除されます

Key キーが常に強参照されている場合、再利用することはできません

Value は強参照されるため、Value が Key キーを間接的に参照しないように注意してください。強く参照されるクロック

これ: Keyのライフサイクルで制御されるキャッシュに基づくのが適切

以上がJava オブジェクトの強い参照、弱い参照、弱い参照、および仮想参照 +ReferenceQueueの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
带你搞懂Java结构化数据处理开源库SPL带你搞懂Java结构化数据处理开源库SPLMay 24, 2022 pm 01:34 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

Java集合框架之PriorityQueue优先级队列Java集合框架之PriorityQueue优先级队列Jun 09, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

完全掌握Java锁(图文解析)完全掌握Java锁(图文解析)Jun 14, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

一起聊聊Java多线程之线程安全问题一起聊聊Java多线程之线程安全问题Apr 21, 2022 pm 06:17 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

Java基础归纳之枚举Java基础归纳之枚举May 26, 2022 am 11:50 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

详细解析Java的this和super关键字详细解析Java的this和super关键字Apr 30, 2022 am 09:00 AM

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

Java数据结构之AVL树详解Java数据结构之AVL树详解Jun 01, 2022 am 11:39 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于平衡二叉树(AVL树)的相关知识,AVL树本质上是带了平衡功能的二叉查找树,下面一起来看一下,希望对大家有帮助。

一文掌握Java8新特性Stream流的概念和使用一文掌握Java8新特性Stream流的概念和使用Jun 23, 2022 pm 12:03 PM

本篇文章给大家带来了关于Java的相关知识,其中主要整理了Stream流的概念和使用的相关问题,包括了Stream流的概念、Stream流的获取、Stream流的常用方法等等内容,下面一起来看一下,希望对大家有帮助。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)