検索
ホームページJava&#&チュートリアルJVM メモリ管理-----GC の概要

なぜ GC の戦略と原則を理解する必要があるのですか?

その理由は、実際には前の章で触れています。それは、日々の仕事や研究において、メモリオーバーフローやメモリリークの問題が避けられないからです。 GC の戦略と原則を理解せずに上記の問題に遭遇すると、多くの場合、途方に暮れることになります。
関連する知識を理解した後でも、問題をすぐに解決できない場合もありますが、少なくとも迷うことはないということは確かです。

GC 戦略はどのような問題を解決しますか?

自動 GC を実行するので、それに対応する戦略が必要です。これらの戦略は、大まかに言うと次のような問題を解決します。
1. リサイクルできる物体。
2. これらのオブジェクトをいつリサイクルするか。
3. どのようなリサイクル方法が使用されているか。

[b]GC 戦略で使用されるアルゴリズムは何ですか[/b]

上記の 3 つの質問に関して、実際、最も重要な質問は最初の質問であり、どのオブジェクトをリサイクルできるかということです。
より効率的で、参照カウント アルゴリズムと呼ばれる、比較的シンプルで直感的な方法があります。ただし、このアルゴリズムには致命的な欠陥があります。つまり、循環参照のあるオブジェクトをリサイクルできないということです。 JVM がこの GC 戦略を採用している場合、プログラマがプログラムを作成するときに、次のようなコードが再び現れることは期待できないと想像してください。

public class Object {  
    Object field = null;  
      
    public static void main(String[] args) {  
        Thread thread = new Thread(new Runnable() {  
            public void run() {  
                Object objectA = new Object();  
                Object objectB = new Object();//1  
                objectA.field = objectB;  
                objectB.field = objectA;//               //to do something  
                objectA = null;  
                objectB = null;//3  
            }  
        });  
        thread.start();  
        while (true);  
    }  
      
}

このコードは少し意図的であるように見えますが、実際には、1 対 1 の関係を持つ 2 つのデータベース オブジェクトがお互いへの参照を維持するなど、実際のプログラミング プロセスで頻繁に発生します。最後の無限ループは、JVM が終了しないようにするためだけのもので、実際的な意味はありません。
現在使用しているGCでは、スレッドスレッドが終了するとobjectAとobjectBの両方がリサイクル対象のオブジェクトとして使用されます。また、GC が上記の参照カウント アルゴリズムを採用している場合、これら 2 つのオブジェクトは決してリサイクルされず、使用後にオブジェクトを明示的に null として分類したとしても、効果はありません。
ここで LZ が大まかに説明します。コードでは、LZ は 3 つの数字 1、2、3 をマークします。最初のステートメントが実行されると、2 つのオブジェクトの参照カウントはすべて 1 になります。 2 番目のステートメントが実行されると、両方のオブジェクトの参照カウントが 2 になります。 3 番目のステートメントが実行された後、つまり両方が NULL 値として分類された後、2 つの参照カウントは 1 のままです。参照カウント アルゴリズムのリサイクル ルールに従って、参照カウントは 0 になるまでリサイクルされません。

ルート検索アルゴリズム

参照カウント アルゴリズムの欠陥のため、JVM は通常、ルート検索アルゴリズムと呼ばれる新しいアルゴリズムを使用します。その処理方法は、複数のルート オブジェクトをセットアップすることです。ルート オブジェクトが特定のオブジェクトに到達できない場合、そのオブジェクトはリサイクル可能であると見なされます。

JVM メモリ管理-----GC の概要

上の図を例にとると、ObjectD と ObjectE は相互に関連していますが、GC ルートがこれら 2 つのオブジェクトに到達できないため、D と E は最終的に GC オブジェクトとみなされます。上の図では参照カウント方式を使用しているため、A ~ E の 5 つのオブジェクトはリサイクルされません。
GC ルートと言えば、JAVA 言語では次のオブジェクトを GC ルートとして使用できます。
1. 仮想マシン スタックで参照されるオブジェクト。
2. メソッド領域のクラスの静的プロパティによって参照されるオブジェクト。
3. メソッド領域の定数によって参照されるオブジェクト。
4. ローカル メソッド スタック内の JNI によって参照されるオブジェクト。
最初のタイプと 4 番目のタイプはどちらもメソッドのローカル変数テーブルを参照します。2 番目のタイプは主に、final として宣言された定数値を参照します。

ガベージ コレクション アルゴリズム

ルート検索アルゴリズムは、ガベージ コレクションの基本的な問題を解決します。これは、前述の最初の問題であり、どのオブジェクトをリサイクルできるかという最も重要な問題です。
ただし、ガベージ コレクションでは、リサイクルする時期とリサイクル方法という最後の 2 つの問題を解決する必要があることは明らかです。最新の仮想マシンの実装には、ルート検索アルゴリズムに基づいて、マーク クリア アルゴリズム、コピー アルゴリズム、およびマーク ソート アルゴリズムという 3 つの主要なガベージ コレクション アルゴリズムがあります。これら 3 つのアルゴリズムはすべてルート検索アルゴリズムを拡張したものですが、それでも非常に理解しやすいものです。

結論

上記は JVM メモリ管理の内容です-----GC の紹介 さらに関連した内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

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ヘンタイを無料で生成します。

ホットツール

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

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

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

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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