この記事は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 セキュリティ: 現代のセキュリティ管理における新たな課題
>>: エッジコンピューティング:その利用を増やすために何を変える必要があるか
電子メールは主にリード生成に関係しており、多くの企業にとって電子メールマーケティングは最も重要なマー...
10gbizの新年大割引プロモーションがここにあります:(1)米国の無制限トラフィックVPS(Win...
少し前のエルケ事件は世間の間で白熱した議論を引き起こし、インターネット上では「暴走消費」の波さえ引き...
今年のクリスマスに向けて、spinserversはダラスとサンノゼのデータセンターの専用サーバーの特...
[編集者注] この記事は @Baidu Business UED からのものです。現在のインターネッ...
皆さんも少し前にJD.comのDouble Elevenチャーター便の広告を見たことがあると思います...
Baidu のアルゴリズムが調整を続ける中、インターネット上では悲しみが広がっている。その後、多くの...
ケータリング O2O 起業には現実的な対応が求められます。最近、私はチームと協力して長沙でオフライン...
iprr (旧称 Acceleration Cloud、現在は新商標「Xiangxiang Clou...
これまで共同購入業界では「口に出せない秘密」とされてきた参加費が、初めて公表された。記者は昨日、6月...
2019年7月25日より、host1plusが長年実施してきたVPS価格がついに値下げされました。今...
データ生成とデータ処理の発展は、基盤となるインフラストラクチャ ネットワークのニーズと進化に大きな影...
PhotonVPSは2008年に設立されました。独自のコンピュータルーム、独立したサーバーブランド、...
ウェブサイト構築中に遭遇する問題は数多くあります。ここでは、ウェブサイト構築中に注意する必要があるい...
Megalayer は今年のブラックフライデー プロモーションを開始しました。香港 (中国)、マニラ...