この記事は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 セキュリティ: 現代のセキュリティ管理における新たな課題
>>: エッジコンピューティング:その利用を増やすために何を変える必要があるか
2013年、SEO業界では「ユーザーエクスペリエンスは王様、コンテンツは女王」という格言が流行しまし...
SEO はデジタル時代の新しいビジネスにとって非常に重要です。賢い起業家は、マーケティング ツールの...
1. クラウドネイティブの技術的背景現在、デジタルトランスフォーメーションはあらゆる業界に徐々に浸透...
百度の新しいアルゴリズムの変更10月23日、ウェブマスターにとってもう一つの「苦難の日」が訪れた。 ...
みなさんこんにちは。私は徐子宇です。ホワイトハットSEOにどの程度注意を払っているかはわかりません。...
SEO について話すときはいつも、さまざまな外部リンク テクニックが話題になります。SEO 担当者は...
Alibaba Cloud が IBM Cloud Paks サードパーティ エコシステムに参加[[...
vmhausは正式にAlipay決済を受け入れると発表し、後日WeChat決済とUnionPay決済...
ウェブマスターは自分のウェブサイトの診断分析をどのように実施すべきでしょうか?今日は、ウェブマスター...
UAE VPS と UAE クラウド サーバー、つまりアラブ首長国連邦の VPS とクラウド サーバ...
360は最近、控えめにリリースされましたが、その影響は控えめではありません。短期間で、多くのウェブサ...
最近、Baidu がまた変更され、アルゴリズムが少し変更されました。友人がとても古典的なことを言った...
なぜソフトテキスト マーケティングを Web サイトの運用戦略の 1 つとして使用する必要があるので...
SharkTech は現在、ロサンゼルスとデンバーのデータセンターのサーバーを大幅割引で提供していま...
ウェブサイトの最適化は、非常に時間のかかるプロセスです。率直に言って、これは「大変で疲れる」仕事だと...