この記事はWeChatの公開アカウント「Code on Java」から転載したもので、著者はCode on Javaです。この記事を転載する場合は、Java Code の公開アカウントにお問い合わせください。 始める前に、ヒープとは何かを確認しましょう。ご存知のとおり、私たちが日々作成するほぼすべての Java オブジェクトはヒープ上に保存されるため、ヒープは管理者が巨大なオブジェクト インスタンスを管理する巨大なオブジェクト プールであると言っても過言ではありません。 オブジェクト プール内のオブジェクトの参照階層は、非常に深くなる場合があります。たとえば、非常に頻繁に呼び出されるインターフェースの場合、オブジェクトの生成速度は非常に優れています。オブジェクト間の関係はネットワークとして記述できます。 Java ではメモリが無限にあるという印象を常に与えますが、オブジェクトは減少せずに増加し続けることはできないため、ガベージ コレクション操作が必要になります。 では、JVM はどのようにしてガベージを見つけるのでしょうか?この記事では、「ガベージ コレクション」を GC と呼びます。 テレビシリーズ「九族滅亡」を覚えていますか? 例えば、蕭寒皮は皇帝を平手打ちし、皇帝の目は黒くなり、顔は腫れ上がった。皇帝は非常に怒り、憎しみを晴らすために蕭寒皮の9つの氏族を処刑するよう命じようとしました。 ハハハハ~シャオハンの批判は終わりました~ それでは、古代の九族絶滅がどのように行われたのか見てみましょう。まず、共通の祖先(つまり、小漢皮家の長兄)まで遡り、小漢皮と関係のある人物を一人ずつ数える必要があります(小漢皮は本当に詐欺です)。 実は、ヒープ上で行われるガベージコレクションもこの「九族殺し」と同じ考え方なので、JVM がどのように GC を実行するのかを詳しく分析してみましょう。 JVM の GC はプログラムによって制御されず、特定の条件が満たされたときに自動的にトリガーされます。 GC が発生すると、オブジェクトに対して、JVM は常にそれを参照する祖先を見つけることができます。最後のオブジェクトが見つかると、JVM はこのオブジェクトの祖先の一部がすでに終了していることを検出するため、それらは JVM によって強制終了されます。 なぜまだ殺されていない先祖がいるのでしょうか?なぜなら、GC から逃れたこれらの祖先は GC ルーツであり、非常に特別な外見をしているからです (外見については以下で紹介します)。 GC ルートから下方向にトレースして検索すると、参照チェーンが生成されます。オブジェクトに GC ルートが関連付けられていない場合、そのオブジェクトは容赦なく強制終了されます。 (ロープについたバッタ) 何が起こっているのかを確認するために絵を描いてみましょう。次の図に示すように、Object5、Object6、および Object7 は GC ルートに関連付けることができず、GC が発生すると破棄されます。 実際、いわゆるガベージ コレクションは GC ルートを中心に展開されますが、同時に、他の参照兄弟にはまったくこの権限がないため、GC ルートは多くのメモリ リークの原因にもなります。 GC ルートとはどのようなオブジェクトなのか疑問に思うかもしれません。 それがどんな物かは関係なく、それがどこにあるかが鍵です(よく考えてくださいね~)。 GC ルートとは何ですか?まず、GC ルートはアクティブである必要がある参照のセットである必要があります。簡単に言えば、プログラムが直接または間接的な参照を通じてアクセスできる潜在的なオブジェクトです (まだ少しわかりにくい気がします)。 GC ルートは次のようになります。
上記のGCルートは、大きく分けて以下の3つのカテゴリーに分類できます。
最後に、ここではオブジェクトではなく、アクティブな参照について話していることに注意してください。オブジェクトは GC ルートとして使用できません。 GC プロセス全体は、これらの生きているオブジェクトを見つけて、残りのスペースを「役に立たない」ものとして認識することです。代わりに、すべての死んだオブジェクトを見つけて、それらが占めていたスペースを再利用します。つまり、JVM ヒープが非常に大きい場合でも、トレース GC 方式に基づくと回復速度は依然として高速です。 要約するGC ルートは到達可能性分析方法です。参照カウントと呼ばれる方法もあります。以下に簡単に紹介させていただきます。 参照カウント方式: Java では、オブジェクトを操作する場合、まずそのオブジェクトへの参照を取得する必要があります。したがって、参照カウント方式を使用して、オブジェクトがリサイクル可能かどうかを判断できます。オブジェクトに参照が追加されると、参照カウンターが 1 増加します。オブジェクトから参照が削除されると、参照カウンタは 1 減少します。オブジェクトの参照カウントが 0 の場合、そのオブジェクトは参照されておらず、リサイクル可能であることを意味します。 利点は、ガベージコレクションがよりタイムリーかつリアルタイムになることです。オブジェクト カウンターが 0 である限り、リサイクル操作を直接実行できます。欠点は、循環参照の問題を解決できないことです。 循環参照の致命的な欠陥のため、主流の JVM では GC を実装するために参照カウントを使用しないため、参照カウントについては完全に忘れてかまいません。 |
<<: SaaS セキュリティ: 現代のセキュリティ管理における新たな課題
>>: エッジコンピューティング:その利用を増やすために何を変える必要があるか
A5を頻繁に訪れると、毎日のように古いウェブマスターがソフト記事の執筆経験を紹介していることに気付く...
誰もが質問形式のタイトルの書き方に触れたことがあると思います。私たちの日常生活では、誰かに会ったとき...
cloudpowerall はマレーシアに登録された会社です。ホストキャットは 3 月上旬に米国ロサ...
新年を迎え、主要プラットフォームが相次いで今年の年間総括と展望を発表しています。DAMO Acade...
最近、360とBaiduの争いがインターネット業界で話題になっており、この戦いは業界では冗談めかして...
2019 年が終わりに近づき、2020 年は新たな旅の始まりです。振り返ってみると、エンタープライズ...
クラウド コンピューティングは、業界では分散コンピューティングの一種として定義されていますが、情報技...
クラウド時代において、開発者は反復的な開発の手間を軽減するために、より便利で「軽量」なツールを緊急に...
[[428799]]この記事はWeChatの公開アカウント「Mingge's IT Essa...
virtualsrv ドメイン名は 2009 年に登録されました。調べたところ、この会社は少なくとも...
適切なクラウド データベースを導入すると、クラウドからモバイル、エッジに至るまで、企業が依存するさま...
今日、IT リーダーは、クラウドベースおよびデータ駆動型のインフラストラクチャを構築する際に、リソー...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスウェブサイトのホームペー...
2018年にWeChatはどのように成長しましたか? WeChatの原動力は何ですか?インターネット...
cloudcone メールからの最新ニュース: SSD VPS をいくつかインストールした後、パフォ...