なぜ 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 は通常、ルート検索アルゴリズムと呼ばれる新しいアルゴリズムを使用します。その処理方法は、複数のルート オブジェクトをセットアップすることです。ルート オブジェクトが特定のオブジェクトに到達できない場合、そのオブジェクトはリサイクル可能であると見なされます。
上の図を例にとると、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) に注目してください。

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

WebStorm Mac版
便利なJavaScript開発ツール

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