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

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

intellijideaultimatiateバージョンを使用してスプリングを開始します...

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。

データベースクエリにTKMYBATISを使用する場合、クエリ条件を構築するためにエンティティクラスの変数名を優雅に取得する方法は一般的な問題です。この記事はピン留めします...
