インタビュアーは、なぜ新世代ではマークスイープアルゴリズムを使わないのかと尋ねた。

インタビュアーは、なぜ新世代ではマークスイープアルゴリズムを使わないのかと尋ねた。

[[398923]]

この記事はWeChatの公開アカウント「Angela's Blog」から転載したもので、著者はAngelaです。この記事を転載する場合は、アンジェラのブログの公開アカウントにご連絡ください。

杭州のオフィスビルでは、アンジェラは新しいパフォーマンスの準備を整え、新しく購入した19.9の革靴を履いてガラスの仕切りのあるオフィスに入ってきた。

面接官: 履歴書を見ると、JVM に多少精通していると書かれていますね。

アンジェラ:はい

インタビュアー: では、ヒープメモリのパーティショニングについて教えてください。

アンジェラ: [考えながら]: これは簡単。さあ、JVM の基本を復習しましょう。

ヒープは新しい世代と古い世代に分かれていることがわかっています。新しい世代は Yong 世代と呼ばれ、古い世代は Old 世代と呼ばれます。

インタビュアー:それから?

アンジェラ: それからどうするの?

インタビュアー:もう終わりですか?もう終わりですか?新しい世代についてはどうですか?

アンジェラ: 聞きたいなら、私に言ってください。言わなければ、あなたが聞きたいかどうか、私にはわかりません。

新しい世代は、エデン領域とサバイバー領域に分かれています。サバイバー領域は、From 領域と To 領域で構成されています。完全なメモリ構造を描いてみましょう。描かないでください。ペンを渡していただければ、下の図のように描きます。

インタビュアー:ああ、その写真はいいのですが、ヒープが若い世代と古い世代に分かれているのはなぜですか?

アンジェラ: もちろん、メモリをより効率的に管理するためです。

インタビュアー:それはどのように言うのですか?

アンジェラ: 新世代と旧世代を区別しないと、メモリがブロック全体になると仮定しましょう。ガベージ コレクターは、寿命の長いオブジェクトを、寿命の短いオブジェクトと一緒に毎回リサイクルします。一般的に、寿命の長いオブジェクトはアプリケーションのライフサイクルと一致している可能性があり、基本的にリサイクルできません。たとえば、Spring フレームワークの Bean 管理に関連するオブジェクト (ApplicationContext) は、アプリケーションの操作全体にわたって存在します。一般的に、これらは数回のリサイクル後に旧世代に配置されます。ただし、新世代と旧世代を区別せず、毎回一緒にリサイクルすると、パフォーマンスの消費が非常に大きくなります。

古い世代と新しい世代を区別した後、古い世代は寿命の長いオブジェクトを保存するために使用され、新しい世代はライフサイクルの短いオブジェクトを保存するために使用されます。古い世代のオブジェクトは非常に安定しており、新しい世代のリサイクルは古い世代に影響を与えないため、リサイクル効率が大幅に向上します。

インタビュアー:では、なぜ新世代はエデン、From、Toの3つのエリアに分かれているのでしょうか?

アンジェラ: [だんだん面白くなってきました]

まず、ほとんどの物体のライフサイクルは非常に短いです。新世代が複数の領域に分割されていない場合、新世代のリサイクルスキームは 2 つある可能性があります。

最初の可能性は、各コレクションが新しい世代のメモリ全体に対して実行されることです。完全なガベージ コレクション プロセスは、次の 3 つのステップに分かれています。

最初にクリーンアップする必要があるオブジェクト マーカーを見つける必要があります。

これらのマークされたオブジェクトをクリーンアップします。

残りのオブジェクトを移動し、昇格年齢に達したオブジェクトを古い世代に移動します。

オブジェクトがリサイクルされると、大量のメモリフラグメントが生成されます(多くのオブジェクトがリサイクルされます)。メモリの断片化を解決するには、残りのオブジェクトを移動する必要があり(マークスイープアルゴリズム)、リサイクルプロセス全体の効率は非常に低くなります。

2 つ目の可能性は、Survivor 領域 (From + To) がない場合、Minor GC (新世代リサイクル) プロセス中に、生き残ったオブジェクトが直接旧世代に送られることです。この場合、旧世代はすぐにいっぱいになり、Major GC がトリガーされます (Major GC は一般に Minor GC を伴うため、Full GC がトリガーされたと見なすこともできます)。Full GC が頻繁に発生すると、プログラムの実行速度と応答速度に影響します。

新しい世代のコレクションはマイナー GC と呼ばれ、古い世代のコレクションはメジャー GC と呼ばれます。

インタビュアー: なぜ2つのサバイバーゾーンが必要なのでしょうか?

アンジェラ: サバイバーエリアが 1 つしかない場合の新世代メモリリサイクルプロセスを見てみましょう。

上の画像に沿って説明します。エデンエリアが初めていっぱいになったとき、メモリのリサイクルは非常に簡単です。エデンエリアで生き残ったオブジェクトをサバイバーエリアに入れるだけです。

2 回目のメモリ リサイクルでは、Eden エリアと Survivor エリアの 2 つの場所をリサイクルする必要があります。

  • Survivor 領域内の残存オブジェクトもリサイクルする必要があるため、Survivor 領域にはマーク アンド コンパクト ガベージ コレクション アルゴリズムを使用する必要があります (最初にクリーンアップする必要があるオブジェクトをマークし、次にそれらをリサイクルし、残りの残存オブジェクトをまとめます)。
  • Eden 領域はレプリケーション アルゴリズムを使用して、Eden 領域に格納されているオブジェクトを Survivor 領域にコピーし、その後 Eden 領域全体をクリアします。

ここで 2 つの Survivor 領域を設定する理由は、メモリの断片化を避けるためだとするオンライン記事をいくつか見ました。これは、2 回目 (およびそれ以降) のリサイクル、つまりメモリのリサイクルでは、まず Eden 領域をリサイクルし、次に Survivor 領域をリサイクルすると想定されているためです。このようにすると、もちろんメモリの断片化が発生しますが、実際に Survivor 領域が 1 つしかない場合、ガベージ コレクションの設計者は、まず Survivor 領域を再利用し、次に Eden 領域を再利用しているはずです。Survivor 領域がリサイクルされてソートされた後、Eden 領域に格納されているオブジェクトは Survivor 領域に移動されるため、Survivor アドレスは連続し、メモリの断片化は発生しません。したがって、本当の理由は、以下で説明する効率の問題です。

インタビュアー:それの何が問題なのですか?

アンジェラ: これにはいくつか問題があります。

  1. 数回のコレクションの後、Survivor 領域がいっぱいになったらどうすればいいでしょうか? 旧世代に直接移動しますか? そうすると、旧世代がすぐに爆発してしまいます。 Eden 領域に移動しますか? そうするとメモリの断片化が発生します。Survivor 領域と Eden 領域が回復された後、メモリの断片化を除去するためにメモリを整理する必要がある可能性があり、パフォーマンスの消費も非常に大きくなります。
  2. 一般的に、マークアンドスイープアルゴリズムのパフォーマンス消費はコピーアルゴリズムよりも大きく、特に新世代では、98%のオブジェクトが「1日で生まれて死ぬ」ため、98%のオブジェクトだけが明確にマークされ、残りの2%のオブジェクトは整理する必要があります。そうでない場合、これらの2%のオブジェクトは直接別の場所に移動され、メモリ全体がクリアされます。Edenのメモリ全体をクリアする効率は非常に高いです。

したがって、最終的な分析では、2 つの残存領域は依然としてパフォーマンス上の考慮事項であり、マーク コピー アルゴリズムはマーク コンパイル アルゴリズムよりも効率的です。

インタビュアー:では、エデンに加えて 2 つのサバイバー エリアで使用されているマーキングとコピーのアルゴリズムについて詳しく教えてください。

アンジェラ: 新しい世代のオブジェクトの 98% は「一夜にして生まれて死ぬ」ため、Eden スペースと Survivor スペースを 1:1 の比率で分割する必要はありません。代わりに、新しい世代は、より大きな Eden スペースと 2 つのより小さな Survivor スペースに分割されます。毎回使用されるのは Eden と Survivor[0] (From 領域) の 1 つだけであり、Survivor[1] (To 領域) はマークされたレプリケーションの実装用に残されます。

リサイクル時には、EdenとSurvivor[0]内のすべての生き残ったオブジェクトが別のSurvivor[1](To)スペースに一度にコピーされ、最後にEdenと使用したSurvivorスペースがクリーンアップされます。

もう一つの注意点: From 領域と To 領域は、各マイナー GC 後に変換されます。From 領域は To 領域になり、To 領域は From 領域になります。これは単なる論理識別子です。

デフォルトでは、HotSpot 仮想マシンは Eden と Survivor のサイズ比を 8:1 に設定します (CMS には適用されません)。つまり、各新世代で使用可能なメモリ領域は、新世代全体の容量の 90% (80% + 10%) であり、メモリの 10% のみが「無駄」になります (メモリの 10% (Survivor To 領域) は常に空になります)。

マークコピーアルゴリズムのプロセス:

  1. Eden エリア + Survivor From エリアがいっぱいになると、生き残ったオブジェクトがマークされ、Survivor To エリアにコピーされます。
  2. Survivor To 領域は From 領域 (論理識別子) になり、From 領域は To 領域になります。
  3. メモリの割り当てについては、手順 1 に進みます。コピー プロセス中に、古い世代の昇格年齢 (既定値は 15) に達した場合は、古い世代に移動されます。

インタビュアー:今、たくさんお話をいただきましたが、ここに来る前に質問を暗記したのですか?

アンジェラ: [考えながら] 答えられなかったら、テクノロジーに対する情熱がないと言われます。答えられたら、質問をただ暗記しているだけだと言われます。何だって? 。

私はインタビュアーに辛抱強く説明しました。「どうしてそんなことが可能なのですか?ここに来る前に、アンジェラのブログの公開アカウントの記事を全部読んだだけなんです、笑」

インタビュアー:どこで見ることができますか?教えてください。

インタビュアー: 旧世代のメモリ回復戦略についてはどうですか? マークコンパクト アルゴリズムについてはどうですか? また、一般的なガベージ コレクターである CMS と G1 についても教えてください。

アンジェラ:もうそのことについて話したくないです。疲れたので。2回目の面接のときに話しましょうか?

面接官:大丈夫です。また2人目の面接官になりますので、直接お話しください。

アンジェラ:本当にそれについて話したくないんです。

インタビュアー: 今日はここまでにしましょう。戻って次の連絡を待ちます。このドアを出たら左に曲がってください。

この記事は読者の質問から生まれました。

<<:  張三が試験でカンニングをしたい場合、どのような暗号化アルゴリズムを使用すればよいでしょうか?先生にバレないように?

>>:  機械学習の収益は2023年までに803億ドルに達すると予想されている

ブログ    
ブログ    

推薦する

スタンフォードNLPコースXCS224Uのビデオが公開されました。実用的な情報が満載です。ぜひ聞いてください。

会話エージェントから検索クエリまで、自然言語理解 (NLP) は今日の最もエキサイティングなテクノロ...

...

「概念のドリフト」問題と闘おう! Google が新しい時間認識フレームワークをリリース: 画像認識精度が 15% 向上

機械学習の分野では、コンセプトドリフトという問題が長い間研究者を悩ませてきました。つまり、データの分...

AIガバナンスがリスクを軽減しながら利益を獲得する方法

[[389556]] AI ガバナンスは、データ プライバシー、アルゴリズムのバイアス、コンプライア...

Alipayの顔認識が「クラック」されましたが、私たちのお金はもう安全ではないのでしょうか?

[[314955]]川沿いを頻繁に歩くと、足が濡れてしまいます。決済の兄貴分であるアリペイも小さな...

企業で文明的な AI を推進するための 6 つのヒント

「文明化された AI」への期待が高まるにつれ、コンサルタントは公平で偏見のないアルゴリズムを作成する...

App Store 中国、検索アルゴリズムを最適化:名前による検索を復活

約1週間の不安が去った後、国内のiOSアプリ開発者はようやく落ち着くことができた。中国におけるApp...

業界観察:世界の人工知能開発はどのレベルに達しましたか?

[[334267]]今日の技術コミュニティにおける人工知能の開発レベルについては、学界、産業界、メ...

アイデアから実装まで、2018 年の 13 の驚くべき新しい NLP 研究

2018 年には、自然言語処理の分野で多くの刺激的なアイデアやツールが生まれました。概念的な視点から...

人間を殺し、ロボット犬を救う「ボストンパワー」ロボットはターミネーターに変身する

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

おそらく2030年までに、量子コンピューティングのChatGPTの瞬間が到来するだろう

2030 年までに RSA 暗号を解読できるマシンが登場するでしょうが、まずは量子センシングやその他...

ロボティックプロセスオートメーションの開発展望

ロボティック プロセス オートメーション (RPA) は、今日のデジタル サポート エクスペリエンス...

ChatGPT のセキュリティ制限が「謎のコード」によって侵害されました!人類を滅ぼすための手順が口から出され、アルパカとクロードも逃れられない

大型模型の「堀」が再び破られた。謎のコードを入力することで、ビッグモデルは有害なコンテンツを生成する...

ナレッジグラフは銀行のビジネスモデルをどのように変えるのでしょうか?

金融部門は、個人の購入から大規模な取引まで、莫大な富につながる大量の貴重なデータを定期的に生成してお...

シティグループは5年以内に1万人の雇用を人工知能で置き換える計画

[[233047]]フィナンシャル・タイムズによると、シティグループは5年以内に投資銀行部門の技術・...