この記事はWeChatの公開アカウント「bugstack」から転載したもので、著者はXiao Fu Geです。この記事を転載する場合は、bugstack の公開アカウントにご連絡ください。 目次
1. はじめに 自分の価値を高めることはどれほど重要ですか? 私は浮き沈みを経験し、男性も女性も見てきました。時間が経つにつれ、永遠に続くものは何もありません! この電車では降りる人もいれば乗る人もいます。他人があなたに付けたレッテルやコメントによる印象は、この列車に関する物語に過ぎません。人は成長し、蓄積し、落ち着いたときにのみ、自分自身の運転手になる機会を得ることができます。 ある年齢になると理解できないかもしれませんが、ある日忙しくなくなったら、自分の進むべき道や歩みについて考えてみるといいでしょう。これらがあなたが望むものであるかどうか確認してください。それがあなたの望むものなら、なぜ不幸そうな顔をしているのですか? 良い!進み続けて、なりたい自分に向かって進みましょう! 2. 面接の質問 ご連絡ありがとうございます!昼にお腹いっぱい食べた後、空想にふけり始めました。なぜこの知識を学ぶことができないのでしょうか?私の頭には入ってこないよ! 「謝菲冰冰」:こんにちは、インタビュアーさん、質問があります。 インタビュアー:何ですか? 「ありがとう、フェイジ」:この知識は私の頭には入ってこない! インタビュアー:これは… 「フェイジジありがとう」: 観終わったら忘れてた。見るのを忘れてた! インタビュアー:練習はしなかったんですか?読んだだけで分かったと思って、保存しただけで理解したと思っていませんか?何も深く考えていないよ!? 「謝非機」:そうらしいですね!私たちに何ができるでしょうか? インタビュアー:これより良い方法はありません。学ぶこと自体は退屈なことです。断片的な時間の無駄を減らし、体系的な学習にもっと時間を費やす方が良いでしょう。記録としてブログを書くにしても、検証してみると良いでしょう。 3. まずガベージコレクションを検証する 参照しないとガベージコレクションがリサイクルされるそうですが?いつリサイクルされますか?どのようにリサイクルされるのですか? 実際の例を見なければ、理系の学生がこの種の知識を受け入れるのは難しい場合がよくあります。私も同じで、見ることができたら一番いいです。コードは数学的論理の具体的な実装です。実装プロセスなしで答えだけを見ても意味がありません。 「テストコード」
この例は、「Java 仮想マシンの詳細な理解」の参照カウント アルゴリズムの章から引用したものです。 この例の結果は、相互に参照しているが null に設定されている 2 つのオブジェクトが GC によってリサイクルされるかどうかを示しています。参照カウンター アルゴリズムのみに従うと、これら 2 つのオブジェクトのカウント識別子は 0 にならず、リサイクルできません。しかし、それはリサイクルされたのでしょうか? ここでは、まず jvm ツール命令 jstat を使用して監視します。監視プロセスでは手動でコードを入力する必要があり、時間がかかるため、Thread.sleep(55000); でスリープします。 testGC() を呼び出す前に。コードを起動したら、以下の命令を実行します。
注: 次の 3 行 (S1U = 1288.0、GCT = 0.003) を見ると、ガベージ コレクションがすでに実行されていることがわかります。 次に、別の方法でテストしてみましょう。起動したプログラムで、GC 印刷パラメータを追加し、GC 変更結果を確認します。
今回は、スリープ機能を削除し、次のようにパラメータ -XX:+PrintGCDetails を追加します。 テスト結果
「この例を使って、JVM ガベージ コレクションの知識フレームワークを見てみましょう。」 4. JVM ガベージ コレクション知識フレームワーク ガベージ コレクション (GC) は、1960 年に MIT Lisp で初めて誕生し、動的なメモリ割り当てとガベージ コレクション テクノロジを使用する最初の言語です。 ガベージ コレクターは主に、どのメモリを再利用する必要があるか、いつ再利用するか、どのように再利用するかという 3 つのことを行います。 ゴミ収集車が誕生して半世紀が経ちました。現在、動的メモリ割り当てとメモリリサイクルの技術は非常に成熟しており、すべてが「自動」段階に入ったようです。しかし、同時実行性の高いシナリオでは、メモリ オーバーフロー、リーク、GC 時間プロセスなどの問題があるかどうかを監視する必要がある場合もあります。したがって、ガベージコレクションに関する関連知識を理解し知ることは、上級プログラマーの成長にとって非常に重要です。 ガベージ コレクターのコア知識項目には、主に、オブジェクトが生きているかどうかの判断、ガベージ コレクション アルゴリズム、さまざまな種類のガベージ コレクター、およびガベージ コレクション プロセスが含まれます。下記の通りです。 図27-1 ガベージコレクタの知識フレームワーク オリジナル画像のダウンロードリンク: http://book.bugstack.cn/#s/6jJp2icA 1. 被験者が死亡しているかどうかを判断する 1.1 参照カウンタ
実装の観点から見ると、参照カウント方式はカウントのために余分なメモリスペースを占有しますが、実装が簡単で、判定効率が高いため、優れたアルゴリズムになります。 Microsoft COM (コンポーネント オブジェクト モデル) テクノロジ、ActionScript 3 を使用した Flash Player、Python 言語など、よく知られている参照事例もいくつかあります。 「しかし」、主流のJava仮想マシンはメモリ管理に参照技術アルゴリズムを使用しません。主な理由は、この単純なカウント方法は、相互依存性や循環参照などを扱うときに非常に複雑になるためです。使用されなくなったメモリがあるかもしれませんが、再利用できず、メモリリークが発生する可能性があります。 1.2 到達可能性分析 Java や C# などの主流言語のメモリ管理サブシステムはすべて、到達可能性分析アルゴリズムを使用して、オブジェクトが生きているかどうかを判断します。 このアルゴリズムは、GC ルートと呼ばれる一連のルート オブジェクトを開始ノード セットとして定義し、これらのノードから開始して、セットによって参照されるすべてのオブジェクトを網羅的に列挙し、それらをセット (ライブ セット) に埋め込むというものです。このプロセスでは、生きているオブジェクトのみをマークするように学習します。そのため、マークされていないオブジェクトはリサイクル可能なオブジェクトになります。 GC ルートには以下が含まれます。
2つの大きな問題 誤検知: 死んだオブジェクトが生きているものとしてマークされ、ガベージコレクションできません。メモリを少し多く消費しますが、影響は小さいです。 ネガティブなミス: 参照されたオブジェクト (使用中) はアクティブとしてマークされておらず、ガベージ コレクションされました。その結果、直接的な結果として JVM がクラッシュします。 (STWは到達可能性分析の精度を確保し、報告不足を回避できます) 2. ガベージコレクションアルゴリズム 2.1 マークスイープアルゴリズム マークスイープ
2.2 マークコピーアルゴリズム マークコピーアルゴリズム
2.3 マークコンパクトアルゴリズム マークコンパクトアルゴリズム
3. ガベージコレクター 3.1 新世代 1.シリアル アルゴリズム: マークコピーアルゴリズム 説明: シンプルで効率的なシングルコア マシン。クライアント モードのデフォルトの新世代コレクター。 2.パラレルパーニュー アルゴリズム: マークコピーアルゴリズム 注: GC スレッド並列バージョンは、単一 CPU のシナリオではあまり効果的ではありません。クライアントモードのJVMでよく使用される 3. パラレルスカベンジ アルゴリズム: マークコピーアルゴリズム 注: 目標は、制御可能なスループット (スループット = ユーザー コードの実行時間 / (ユーザー コードの実行時間 + ガベージ コレクション時間)) を達成することです。 3.2 旧世代 1.シリアルオールド アルゴリズム: マーク圧縮アルゴリズム 説明: 平均的なパフォーマンス、シングルスレッド バージョン。 1.5 より前では Parallel Scavenge で使用されていました。 CMS のフォールバックとして。 2.パラレルオールド アルゴリズム: マーク圧縮アルゴリズム 説明: GC マルチスレッド並列。一緒に使用される従来のシリアル スカベンジとパラレル スカベンジを置き換えます。 3.CMS アルゴリズム: マークスイープアルゴリズム 説明: CPU リソースに敏感で、一時停止時間が長くなります。マーク アンド スイープ アルゴリズムはメモリの断片化を生成し、パラメータによって断片のマージとデフラグを有効にすることができます。基本的にG1に置き換えられました 3.3 G1 アルゴリズム: マーク圧縮アルゴリズム 説明: マルチコアおよび大容量メモリのマシン、GC マルチスレッド並列実行、低停止、高回復効率に適しています。 V. 結論 JVM には、この記事では触れられていない、安全ノード、安全領域、カード テーブル、書き込みバリアなど、HotSpot 実装アルゴリズムの詳細を含む、自動メモリ管理に関する多くの知識があります。それぞれの内容は、詳しく研究する価値があります。 面接のために質問をただ暗記するのでなければ、練習を通して学習内容を検証するのが最善の方法です。そうでなければ、この種の知識は 3 分未満の映画のようなもので、その内容を記憶することは困難です。 コンテンツ全体も傅兄弟の学習と整理のプロセスであり、今後もさらに深く掘り下げて共有していく予定です。興味のある友達は一緒に議論したり学んだりすることができます。 |
<<: クロスリージョンシナリオで分散システムの一貫性を解決するにはどうすればよいでしょうか?
>>: モノリシックアーキテクチャから分散データ永続化へ、ORMフレームワークMybatis
ウェブサイトの最適化は外部リンクの宣伝と切り離せません。SEO 最適化では、「外部リンクは王様」とい...
SEOの人気が高まるにつれて、オンラインマーケティングに従事するほぼすべての企業が優れたSEOを備え...
Web3.0 時代は分散型クラウド コンピューティングの発展を促進し、膨大な量のデータが分散型クラウ...
Hostodo は設立されてまだ日が浅いです。そのコンピュータルームは QuadraNet のロサン...
ユーザーのニーズは一定ではないため、Web サイトは常に最新のユーザー ニーズに合わせて調整する必要...
北京時間1月20日、外国メディアの報道によると、フェイスブックの最大の成功は、常に世界人口の7分の1...
これまでHostcatでxenspecを2回紹介してきました。最初はシカゴデータセンターのトラフィッ...
[51CTO.comからのオリジナル記事] 伝統的なソリューションディストリビューターからデジタルト...
安全を保つため、あるいは一時的に妥協するため、選択肢は異なりますが、目的は同じです。すべては発展のた...
「ramnode-$3.5/512m メモリ/40g SSD/1T トラフィック/シアトル/ニューヨ...
今後、電子商取引茶業界はどのような発展傾向を示すのでしょうか?著者がまとめているので見てみましょう。...
クラウド コンピューティングは、個人や企業のユーザーがオンデマンドで簡単に拡張できる方法でコンピュー...
extravm(~) のハードコア VPS をご紹介します。データ センターは米国マイアミにあり、1...
Hosthatch は今年のブラックフライデーに、大容量ハードドライブストレージを備えた VPS や...
2010年に始まった不動産規制は、不動産業界全体を最前線に押し上げました。銀行融資は厳しくなり、購入...