JVMメモリリコール究極難解:ガベージコレクタ

はじめに:

前のJavaオブジェクトの死亡証明するためにした後、我々は、オブジェクトが死んだことをどのように決定されるかについて話していること、およびガベージコレクションのアルゴリズム:JVMメモリ回復究極難解は、後に詳細に4つのガベージコレクションのアルゴリズムを、より人気が紹介されました主要な仮想マシンは完全に4つのアルゴリズムの実現可能性を検証し、需要がで、いわゆる市場があるでしょうがありコア技術習得するために、ゴミの強い信念を、ごみの会社がされて入ってきた(あなたがわから呪いではありません?)、同社は、消費者の大半のための7つの主要なシーンのガベージコレクタをカバーするごみの息吹を導入楽に90パーセントの市場シェアを占めていた、同社はその日の設定、競合他社が行くように予定されていた一方で、市場に殺到していますアフリカ、ここでの話は、JVMの宇宙が正式に形成しました。

はい、ナンセンスの深刻。

次のように7つの製品がありました。

  • シングルスレッドのガベージコレクションリトルプリンス:シリアルコレクター
  • マルチスレッドガベージコレクション王子:ParNewコレクター
  • スループット優先星の王子さま:パラレルスカベンジコレクタ
  • シングルスレッドのガベージコレクション古い王子:シリアルオールド・コレクター
  • マルチスレッドガベージコレクション古い王子:ParNew古いコレクター
  • ガベージコレクタ新星:CMSコレクター
  • :次世代コレクタの未来からG1コレクタ

後でとして知られていたごみのリサイクルの分野で優れた性能、メモリの危機を救うために何回も、とガベージコレクションのアライアンス

シリアルコレクター:

まず、最初のプレイシリアルコレクターである、それはガベージコレクションのシリアル、時代のJDK1.3不毛物質の前に、IEのようなシリアル・コレクターが唯一の選択肢である、最古のコレクタ内のすべてのコレクターでありますクリーニング叔母の私たちの通常の方法、ガベージコレクションと少し似て、の存在下で、すべてのスレッドを教えてくれます。

あなたは、あなた、あなたは、単にSaowan、移動しないでください

シリアル・コレクタ出て作業しているとき、他のワーカースレッドは、あなたがゲームのJavaの栄光を呼び出すなどの多くの用途のために許容されないそのコレクションの最後まで中断されますが、戦闘群を行うために準備され、シリアル・コレクタは立ち上がって言って、エッジにKaokao最初の兄弟、私はゴミを収集し、あなたに耐えることができる5分間、一時停止を与えたい、ここでの新しい世代で使用されているシリアル・コレクター、実行中のプロセスで複製アルゴリズム旧世代使用して、マークが-照合アルゴリズム

読者は確かに一つだけコアシステムで収集され、スレッドが対話する必要がないため、リサイクル、他の(シングルスレッド)右、それは本当、シリアル特異性ではない、このガベージコレクタがあまりにもゴミである、と言うだろうが、ここで見ます少し高い効率。

ParNewコレクター:

ParNewコレクター、実際には、コレクションのアルゴリズムが使用されているシリアル・コレクタのマルチスレッド版で、単語を停止しない(他のスレッドを一時停止し、タイプSTW一時停止)、オブジェクトの割り当て規則は、復旧戦略はほぼ正確シリアルコレクタと同じですが、エクセルではなく、青、ガベージコレクションの実装はマルチスレッドされParNewが、もちろん、これはそれがJava仮想マシンの世界に基づきするための十分な理由ではない、その最大の利点は、ほとんど宣誓、特に良好な関係とCMSです兄弟は、2つの共動作を完全に理解し、これらの、シリアルおよびパラレルスカベンジコレクタは、それがどのように重要な良いチームメイトを見て見劣りすることができます。以下に示すようにParNew作業工程:

あなたはこのチャートでは、ああ少し斜めになり、私たちはこれらの詳細については気にしません

しかしparNewコレクタは、シリアル・コレクタを爆破した後、マルチスレッドのため追加と言うことではない、とだけ1つのカーネル、効率ParNewなりません通常、高いシリアル・コレクターが存在するとき、人は通常、10よりもクリーンアップするための小さな部屋であるため、相互に通信するいかなるコストがないので個人は、高速アップスイープが、コアの数の増加に伴って、ParNewの利点が徐々に反映されます。

並列スカベンジコレクター:

他のガベージコレクタは絶望的偶然の一致、パラレルの清掃は、コレクターの新世代で、マルチスレッドでParNewコレクター、複製アルゴリズムとほぼ同じ、彼は場所を正確に強力な、はい、アイデア、それ別の方法は、選択したユーザスレッドの停止時間短縮スループット優先順位を。

PS:スループット=実行するタイムコードユーザ/(+時間、ユーザがコード時のガベージコレクタを実行します)

高いスループットは、時間を実行しているユーザーコードは、元のJVMの仮想マシン、私はよくそれを言わなかったかの感の参照の深い理解により本明細書に組み込まれ、高いことを意味します。

短い時間のプログラムは、ユーザと対話する必要があり、より適切な、ポーズ、かなりの速度はそれに応じて、ユーザーエクスペリエンスを向上させることができ、高いスループットがあまりにもすることなく、主に、バックグラウンドでの操作のために、できるだけ早くプログラムを完了するためのCPU時間コンピューティングタスクを効率的に使用することができますマルチタスクの相互作用。

少し低いの感があり、ガベージコレクタは,,,マップされません。

シリアル旧コレクター:

シリアル・オールド・コレクターズ・エディションシリアル古いコレクター、それはまた、使用してシングルスレッドのコレクター、あるマークを-照合アルゴリズムの並列スカベンジコレクタとシリアルCMSコレクターとの関係ではないため、主にクライアント・モードで動作しますよく、すべての彼ら2は、古い十年新世代の良い友達になった、それはバックアッププランとして二CMSコレクタと組み合わせて使用することができます。次のようにその作業を図:

ParNew旧コレクター:

同じ、ParNew旧ParNewコレクタは、コレクターの古いバージョンの使用であるマルチスレッドおよびソートアルゴリズム-マーキング我々は上記の言ったように、あなたが選択した後ので、もし、特に望ましくないパラレルスカベンジコレクタとコレクタCMSコレクターの新世代として並列スカベンジコレクタが、それは昔のコレクターたちの唯一のオプションシリアル古いコレクター、コレクターやシリアル昔はシングルスレッドプロセッサに属していることを意味し、必然的にパフォーマンス上の問題を抱えているので、このう比較的退屈な、単にこれまでのところ、対処されていたParNew旧コレクターを起動するためにそれをすべてを束ねている、パラレルスカベンジコレクタ+ ParNew旧コレクタは、実際の優先順位は、組み合わせを達成するスループットを達成することです。

図はParNew古いコレクタが実行される概略図です。

CMSコレクター:

CMSの並行マークスイープコレクターの完全な名前に似たコレクタと、ほとんどのコレクターは、また、ガベージコレクタスレッドの停止時間を短縮することを約束しています。自身の高度なバージョン使用するマークを-スイープアルゴリズム

4つのプロセスに分け:

  1. 初期マーク
  2. 並行マーク
  3. ラベルを変更
  4. 同時クリア

どこで同時および並行マークとクリア実際の作業を行うには、両方のは、全体のガベージコレクション処理時間のほとんどを占めています。最初のタグは、それが再マーキング変更を確認するようにマークするだけでなく、迅速に完了させ、その後、多くの時間を取らないとマークする必要があります誰が見て少し早く来るように言うことができます。

次のように実装プロセスは以下のとおりです。

CMSコレクタがスターコレクターはなく、3つの明らかな問題があるその欠陥、なしで、今日です。

  • 最初は、CMSコレクタを使用することであるマーク-スイープアルゴリズムは、スペースデブリの多くを引き起こす可能性があり、私はガベージコレクションのアルゴリズム上の記事で説明している理由は、理解していない友人は見ることができます。
  • 第二は、CPUリソースに非常に敏感である:CPUが受け入れることができるとき、私たちは、私は健康厚いを持っている、ので、フローチャート、マルチスレッド、マルチタイムをしたいと思いますが、ほとんどのより多くのサポートを食べることができますが、比較的少数の際にCPU時間は、飢え子供糸の束を上げる母親の同等、それは、非常に困難になり、当社のアプリケーションパフォーマンスの対応する減少につながります。
  • 第三は、「浮動ごみ」を回復する方法はありません。この浮きゴミはこれが何を意味するのかであるので、我々は理解して、あなたがあそこにあなたの兄弟を掃引したときに、あなたの兄弟の隣に、自宅であなたをメロンの種を、床を掃くんエッジスイープそれはまだきれいな場所を総なめにした、しかし、あなたは一度だけスキャンできる仮想マシンのプロビジョニングは、戻って行くことができないあなたの側にあるので、あなたは、ごみを処理する際にスイープで待たなければなりません。そのため、CMSがあるため、実行生成された回復の回復の過程でどのような新しいスレッド、つまり、浮動ゴミを拒否することはできません。

G1コレクター:

G1コレクタ私はそれを呼び出す次世代ガベージコレクタにより、いくつかの未解決の問題にしかし、将来のガベージコレクタ、実際のスピーキング、G1ガベージコレクタは、結果の開発の最前線の一つである、ので、 JDK7が正式に家族JVM仮想マシンに参加するまでの遅延が表示されないことができ、それがデフォルトのガベージコレクタJDK9として表示されます。

G1の兆候は、エンジニアはCMSのガベージコレクタの一部を補うためにも、G1、私たちの以前の過去の経験によると、新技術の誕生は、古い技術の不足を補うためにする必要があり、ちょうど少し長く追加ガベージコレクタを考えていないです主に以下の点でCMSのガベージコレクタに関する問題の誕生、G1のメジャーアップグレード、:

  • G1は、圧縮空間の面で利点があります
  • あるメモリの断片エデン、サバイバー、古い安全でない領域を避けた領域に分割G1メモリ空間(地域)の方法によって、より柔軟なメモリ使用効率の点で
  • G1ガベージコレクション時間(休止時間)、予想される休止時間を設定することにより、アバランシェ現象の適用を回避するように制御することができます
  • CMSは、STWを行っている、すぐに仕事をしながら、メモリの空きメモリの統合の回復後、およびデフォルトG1(世界を停止)する場合
  • CMSはOゾーンでのみ使用でき、一方G1は、ヤングGCで使用されます

ガベージコレクタの他の項に比べ、G1は、主に次の4つの特徴を有します。

  • 並列並行:より良いマルチCPUの利点を取ります。
  • 世代別コレクション:このパワフルで、交尾するのに十分な強度ではない、全体のGCヒープを管理することができ、人は完全なメモリを運びます。
  • 空間統合:シュレーディンガーのガベージコレクションアルゴリズムは、全体的な外観が目印に基づいています-アルゴリズムの一種でなく、ローカルベースのレプリケーションアルゴリズムを見たいが、二つの彼らはほとんどなく、メモリスペースデブリを使用するどんなに。
  • 予測可能な一時停止:AIのようなビットは、予測可能な休止時間モデルは地域全体の達成するために、全体のJavaヒープのガベージコレクションを避けるために計画することができる確立します。

G1は、実装プロセスはまだ我々はより多くの物語を支払うことはありません場合は、比較的複雑であり、学生は、関連する情報を検索するために行くことができるかを知りたいです。

そして同じCMS、G1のガベージコレクションプロセスは、4つのステージに分かれています。

  1. 初期マーク
  2. 並行マーク
  3. 最終マーク
  4. フィルターのリサイクル

このフローチャートは以下のようです:

要約:

この記事では、ガベージコレクタのJVM 7種類は、と言う方が少し早いと言われている、独自の強みを持って、絶対的な暴行やぶら下げ、のみ選択したシーンはありません。適切なガベージコレクタを有する好適なシーンは、私たちのアプリケーションのパフォーマンスが改善されていることを確認します。

私は(ハム)、私には関係ハロー果物を食べるように漢の数であります

ああポイントを歩くように。

ちょっと待って。

関連商品私のgithubのダウンロード(歓迎スター)への歓迎します:

github.com/hanshuaikan...

おすすめ

転載: juejin.im/post/5d85d093f265da03e71b3080