導入 究極のアルゴリズムとは何ですか? 実際、これは現在の JVM で使用されているアルゴリズムであり、究極のものではありません。おそらく数年後には、新たな究極のアルゴリズムが登場するでしょう。私たちは達人の能力を信じているからこそ、それが実現することはほぼ間違いないでしょう。 では、世代別コレクション アルゴリズムは GC をどのように処理するのでしょうか?
オブジェクト分類 世代別コレクション アルゴリズムは、オブジェクトのさまざまな特性に基づいて適切なアルゴリズムを使用します。ここでは実際には新しいアルゴリズムは作成されません。世代別コレクションアルゴリズムは 4 番目のアルゴリズムであると言うよりも、最初の 3 つのアルゴリズムの実用的な応用であると言った方が適切です。 まず、オブジェクトのさまざまな特性について説明し、次にこれらのオブジェクトの GC アルゴリズムを共同で選択していきます。 メモリ内のオブジェクトは、そのライフサイクルの長さに応じて、大まかに 3 つのタイプに分けられます。以下の名前はすべて個人名です。 1. 早死オブジェクト: 一夜にして生まれて死ぬオブジェクト。平たく言えば、それはすぐに死んでしまう物体です。 例: メソッドのローカル変数、ループ内の一時変数など。 2. 不滅のオブジェクト: このタイプのオブジェクトは通常、長期間存続し、非常に古い年齢になっても死にません。しかし、最終的な分析では、不滅の物体は遅かれ早かれほぼ確実に死にますが、それは「ほぼ」というだけです。 例: キャッシュ オブジェクト、データベース接続オブジェクト、シングルトン オブジェクト (シングルトン パターン) など。 3. 不滅のオブジェクト: このようなオブジェクトは、通常、一度誕生するとほぼ不滅です。彼らはほぼ常に不滅です。覚えておいてください、彼らはほぼ不滅です。 例: 文字列プール内のオブジェクト (flyweight パターン)、ロードされたクラス情報など。 オブジェクトに対応するメモリ領域 先ほどメモリ管理を紹介したとき、JVM がどのようにメモリを分割したかを覚えていますか? 上記の 3 種類のオブジェクトをメモリ領域にマップします。つまり、中止されたオブジェクトと不滅オブジェクトは JAVA ヒープに、不滅オブジェクトはメソッド領域にマップされます。 前の章で述べたように、JAVA ヒープの場合、JVM 仕様では GC の実装が必須です。したがって、未熟な物体や老化した物体の場合、死はほぼ避けられない結果ですが、それは「ほぼ」に過ぎません。一部のオブジェクトがアプリケーションの最後まで存続することは避けられません。ただし、JVM 仕様ではメソッド領域の GC は必須ではないため、JVM 実装でメソッド領域の GC が実装されていない場合、不滅オブジェクトは真に不滅オブジェクトとなります。 不滅オブジェクトのライフ サイクルは長すぎるため、世代別コレクション アルゴリズムは、JAVA ヒープ、つまり中止されたオブジェクトと古い不滅オブジェクト用に設計されています。 JAVA ヒープのオブジェクト回復 (中止されたオブジェクトと不滅のオブジェクト) 上記の分析に基づいて、世代別コレクション アルゴリズムが JAVA ヒープのメモリ回復、つまり中止されたオブジェクトと不滅オブジェクトの回復をどのように処理するかを見てみましょう。 中止されたオブジェクト: これらのオブジェクトは生成されてすぐに消滅し、寿命が短くなります。レプリケーション アルゴリズムを使用するための要件を覚えていますか?つまり、オブジェクトの生存率は高すぎることはできないため、中止されたオブジェクトはレプリケーション アルゴリズムの使用に最も適しています。 ちょっとした質問です: 50% のメモリの無駄をどうすればいいでしょうか? Q&A: 中止されたオブジェクトの生存率は一般的に低いため、メモリの 50% をアイドル状態として使用する必要はありません。通常、2 つの 10% のメモリ領域はアイドル領域とアクティブ領域として使用され、メモリの残りの 80% は新しく作成されたオブジェクトのメモリを割り当てるために使用されます。 GC が発生すると、10% のアクティブ間隔と、残りの 80% 内の残存オブジェクトが 10% の空き間隔に転送されます。次に、前の 90% のメモリが解放され、これが繰り返されます。 GC プロセスをより明確に理解できるように、LZ は次の図を示します。 図は、各段階での 3 つの領域のメモリ状態を示しています。写真を見れば、GC プロセスを理解するのは難しくないと思います。 ただし、言及したい点が 2 つあります。 1 つ目は、この方法を使用するとメモリの 10% しか無駄にならないことです。メモリの整理と GC 速度が向上するため、これは許容範囲内です。 2 番目のポイントは、この戦略の前提は、生き残った各オブジェクトが占有するメモリがこの 10% のサイズを超えることができないということです。このサイズを超えると、余分なオブジェクトはコピーできなくなります。 上記の予期しない状況、つまり、生き残ったオブジェクトによって占有されるメモリが大きすぎる状況を解決するために、専門家は JAVA ヒープを 2 つの部分に分割します。上記の 3 つの領域は、新世代または若い世代と呼ばれる最初の部分です。残りの部分は、不滅のオブジェクトを格納するために使用され、古い世代と呼ばれます。 とても適切な名前ではないでしょうか?不滅の物体をどう扱うか見てみましょう。 不滅オブジェクト: このタイプのオブジェクトは、ほとんどが新しい世代から転送されるため、生存率が非常に高くなります。人間と同じように、長く生きれば不死になります。 通常、次の 2 つの状況が発生すると、オブジェクトは若い世代の領域から古い世代の領域に移動されます。 1. 新しい世代のすべてのオブジェクトには年齢があります。これらのオブジェクトの年齢が一定のレベルに達すると (年齢はオブジェクトが生き残った GC の数です。オブジェクトが各 GC を生き残ると、年齢は 1 ずつ増加します)、古い世代に転送されます。古い世代に転送するための age 値は、通常、JVM で設定できます。 2. 新しい世代で生き残ったオブジェクトが占有するメモリが 10% を超えると、余分なオブジェクトは古い世代に配置されます。このとき、古い世代は新しい世代のための「予備倉庫」となります。 不滅オブジェクトの特性を考慮すると、生存率が高すぎるため、レプリケーション アルゴリズムの使用は明らかに適切ではなくなり、古い世代がレプリケーション アルゴリズムを再度使用すると、バックアップ ウェアハウスがなくなることを忘れないでください。したがって、一般的に言えば、古い不滅オブジェクトには、マーク/スイープまたはマーク/スイープ アルゴリズムのみを使用できます。 メソッド領域でのオブジェクトのリサイクル(不滅オブジェクト) 上記の 2 つの状況では、GC の主な焦点が JAVA ヒープであり、世代別コレクション アルゴリズムのすべての内容も含まれているため、GC の問題の大部分は解決されています。不滅オブジェクトのその後のリサイクルは、世代別コレクション アルゴリズムの一部ではなくなります。 メソッド領域には不滅のオブジェクトが存在します。私たちがよく使うホットスポット仮想マシン(JDK のデフォルトの JVM)では、メソッド領域は親しみを込めて永続世代とも呼ばれます。とても適切な名前ではないでしょうか? 実のところ、はるか昔には、永続的な世代は存在しませんでした。当時は、JAVA クラスのインスタンス情報とクラス情報を含む永久世代と古い世代が一緒に保存されていました。しかし、後になってクラス情報のアンロードはほとんど行われないことがわかったので、2 つを分離しました。幸いなことに、これによりパフォーマンスはかなり向上しました。つまり、永久世代は分割されました。 このエリアのGCは旧世代と同様の方式を採用しています。 「予備の倉庫」がないため、どちらもマーク/スイープとマーク/コンパクトのアルゴリズムのみを使用できます。 リサイクルの時間 JVM が GC を実行する場合、上記の 3 つのメモリ領域が必ずしも一緒にリサイクルされるわけではありません。ほとんどの場合、新しい世代をリサイクルします。したがって、GC は回復される領域に応じて 2 つのタイプに分けられ、1 つは通常の GC (マイナー GC) であり、もう 1 つはグローバル GC (メジャー GC またはフル GC) です。対象地域は以下の通りです。 通常 GC (マイナー GC): 新しい世代領域のみの GC。 グローバル GC (メジャー GC またはフル GC): 古い世代の GC で、新しい世代の GC と永続的な世代の GC が伴う場合もあります。 古い世代と永続的な世代の GC 効果は比較的低く、2 つのメモリ使用量の増加は緩やかであるため、通常、グローバル GC をトリガーするには、通常の GC が数回必要になります。 |
<<: 特別レポート:2019年第9回中国クラウドコンピューティング標準およびアプリケーション会議
>>: 分散遅延メッセージングの実装方法を尋ねられたら、この記事を教えてあげてください。
私はこの業界に長くいるわけではありません。せいぜい、SEO の愛好家であり学習者としか考えられません...
最近、福州100%モールが「リベート」という概念を利用して資金集めのねずみ講を行っていた違法行為が暴...
WeChat の成功は、多かれ少なかれ時代の恩恵と自らの奨励によるものであり、Momo やモバイル ...
コア要約: PCインターネット利用者の規模は引き続き減少している。減少率は鈍化しているものの、人口ボ...
百度が10月23日にハイパーリンク不正行為の取り締まりを発表して以来、多数のウェブサイトが崩壊しまし...
SEO 最適化はすでに決まり文句になっていますが、独立したブログの SEO 最適化はさらに繰り返しに...
エッジコンピューティング2.0の新時代へようこそ。2020年エッジコンピューティング業界サミットが間...
ゲームライセンスは政策レベルではまだ厳しく制限されているが、ビリビリがゲーム分野でこのユーザー層をう...
北京4月12日(記者 劉洋)中国サイバースペース管理局ネットワークニュース調整局局長の劉正栄氏と工業...
timeweb(ロシアの信頼できるブランド、13年間運営)からの最新ニュース:価格は変更せずに、公式...
コンテナとサーバーレス プラットフォームに基づくクラウド ネイティブ アプリケーションは、世界中の組...
今月、zorocloudはすべてのクラウドサーバーを対象に、四半期払いで25%オフ、月払いで13%オ...
はじめに:ロゴ、広告、スポークスマン、複雑な色やスタイルなしで、無印良品の業績は急上昇しました。無印...
[51CTO.com からのオリジナル記事] 過去 10 年間で、クラウド コンピューティングは生活...
聖パトリックデーを祝して、Linode は 17 ドルのアカウント クレジットが付与される割引コード...