画像とテキストのストーリー: JVM の世界へ誘う記事

画像とテキストのストーリー: JVM の世界へ誘う記事

[[428766]]

最近、私はほとんどの余暇時間を、シンプルな RPC フレームワーク (初心者でも理解できるように詳細な説明と知識ポイント付き) の作成に費やしていたため、元の記事が少し遅れてしまいました。しかし、これによってバッファが得られます。数日前に、優れたオリジナルの技術記事をいくつか投稿しました。来て!オレ・ゲイ!❞

Xiaoqiang は 3 年以上勤務している開発エンジニアです。投稿数から、Xiaoqiang がまだ経験不足であることがわかります。

プログラマーの髪のボリュームはすごい

最近会社では何も起こらず、彼は退屈し始めている。その日の午後、同僚たちはビジネスについて熱く議論していたが、彼は参加せず、知識を学ぼうと決心した。彼は退屈しのぎにさまざまな Web ページをめくっていたところ、JVM が巨匠たちによって推奨されている知識であることがわかり、じっくり調べてみることにしました。

5分後…

小強はこの知識が少し退屈だと感じました。偉大な達人だけがそれを読むことができるのも不思議ではありません。さらに数分間読んだ後、小強は疲れを感じ、眠い目をこすりました。

しかし、この瞬間、周りの同僚たちの白熱した議論が聞こえなくなり、非常に静かになったことに突然気づいた。

1. 境界に入る

シャオチアンは一生懸命目を開けようとしたが、実は白い空間にいることに気づいた。彼はショックを受けて、自分に何が起こったのかと考えました。私はタイムトラベルしたのでしょうか?でも、世界と同じくらい絵のように美しく、美しい女性がたくさんいる場所に旅行しなければならない...この状況...

突然、白いひげを生やした老人が彼のところにやって来た。 Xiaoqiang が話し始めようとしたが、老人が先導してこう言った。「こんにちは、私はこの JVM の世界の創造者です。」私のことを「HotSpot」と呼んでいただいても構いません。私が作った世界は「JVM 仕様」に従って完成しているので。休憩中、お客さんが来るのに気づきました。それはあなただったのです。

小強:聞きたいのですが…

老人: 聞く必要はない。君が私が作ったこの世界について知りたいのは分かっている!私と来て。

おじいさん、私が何も言わないうちに終わってるよ!わかりました。見ながらお話ししましょう。

老人は歩きながら言った。「JVM のワールド空間は限られています。」私たちは、誰もが自分の仕事を持ち、役に立たない人は残らないという一つの原則を守っています。

小強:あ​​あ!なんて残酷なんだろう。

老人:いいえ、これは残酷ではありません。私たちは、お客様にサービスを提供するために、そしてお客様のために一生懸命働くためにこの世に生まれてきました。全員が自分の能力を発揮して、タスクを無事に完了しました。ステージを去ることは彼らにとって当然であり、最良の行き先です。

シャオチアン:その通りです。こうすることで世界はそれほど混雑しなくなり、誰もが秩序正しく働くことができるようになります。どうして私はこんなにバカなんだろう…

2. レイアウト

老人は目の前に立ち止まり、こう言った。「さあ来なさい。この世界の全体的な構成と中央エリアのレイアウトをお見せしましょう。」

全体レイアウト図

まず、主な日常作業領域(ランタイム データ領域)を見てみましょう。作業をより効率的にするために、ワールド空間をこれらのセクションに分割します。

「住宅地-山」

ここは仕事以外で人々が暮らす住宅街です。さらに居住エリアを年齢に応じてエデンエリア、サバイバーエリア、高齢者エリアに分けました。

住宅街

「ワークスペーススタック」

各タスクが発生すると、そのタスクを完了するための別の場所がワークスペース内に確保されます。

スタックフレーム図

「レコーダープログラムカウンタ」

同時に実行できるタスクの数には限りがあるため、異なるタスクを異なる時間スライスに分割する必要があります。タスクを切り替えるときは、次回作業を続行できるように、タスクが完了した場所を記録するレコーダーが必要です。

「倉庫管理分野-方法分野」

ここには、作業者のテンプレートと、よく使用され変更されないツールが保存されます。

3. 生と死

ここで働く人々は生と死を経験し、そのほとんどは老齢まで生きられないでしょうが、それは問題ではありません。重要なのは、彼らが私たちに貢献してくれたということです。

3.1 誕生

老人:ここにいる全員にテンプレート(クラス)がある。住宅街で休憩している背の高い男の人が見えますか?彼の名前は張三です。外部の顧客から提供されたテンプレート「ユーザークラス」に基づいて作成されました。彼は顧客に最も愛される従業員です。これらのクライアントのテンプレート(クラス)がどのようにして私たちの世界に入ってきたかご存知ですか?

小強:これについては少し知っています。以前それについて少し読んだことがあります。このプロセスはまだ少し複雑です。クライアントのテンプレート (クラス) は、変換ファクトリ (コンパイラ) を介してクラス バイトコードに変換されます。これは、ワールドがバイトコードのみを認識し、ロード システムがここでそれらをロードするためです。

読み込みプロセスには次の段階があります。

クラスのロードプロセス

ロードフェーズはローダーによって完了します。

老人: はい、スタートアップ クラス ローダー、拡張クラス ローダー、アプリケーション クラス ローダーの 3 種類のローダーを提供しています。もちろん、お客様がローダーをカスタマイズすることも可能です。

親委任モデル

Xiaoqiang: 彼らは親の委任モデルに従っていますが、その用語はよくわかりません。

老人: これは言語翻訳の問題によるものです。このモデルは「保護者委任」と呼ばれます。わかりますか?それは、両親に協力してもらって完成させることを意味します。

Xiaoqiang: 親委任モデルの利点は何ですか?

老人:

優先順位階層により、テンプレート(クラス)の繰り返し読み込みを回避できます。

セキュリティ上の懸念からJavaコアAPIの置き換えが不可能

老人は続けた。「接続プロセスの3つのステップが何であるか知っていますか?」

小強:詳しいことは分からないんですが…

老人は笑ってこう言った。「顧客が定義したテンプレート(クラス)をすべて拒否するわけではありません。」私たちの世界の安全とより良いサービスの提供のために、テンプレートの検証とフォローアップ操作を実施します。

検証には、フォーマット検証、メタデータ検証、バイトコード検証、シンボル検証が含まれます。検証に合格すると、テンプレートが依存するもの (クラス変数) にスペースを割り当て、最後にシンボリック参照を直接参照に置き換えます。

老人は小強を見て眉をひそめ、続けてこう言った。「君は象徴的参照と直接的参照が何なのか理解していないのかもしれない!」

シンボリック参照とは、コンパイル時に、テンプレート (クラス) が依存する他のものが空間内のどこに配置されるかわからないため、シンボルでのみ表すことができることを意味します。

直接参照とは、ここにロードされるものすべてが独自の実空間アドレスを持ち、シンボリック参照を置き換えることを意味します。この方法では、ランタイムは依存するものを見つけることができます。

最後のステップは初期化です。このステージでは主にクラス変数を初期化し、クラスコンストラクターを実行するプロセスです。

Xiaoqiang: なぜこれらのテンプレートが表示されないのですか?

老人:これらのテンプレートは世界の奥に隠してあるので、ほとんどの人には見えません。これらは総称してKlassと呼ばれます。

小強:それは違うよ!間違いを犯しましたか?それはクラスと呼ぶべきではないでしょうか?

老人:ハハハ!先ほど言ったように、ほとんどの人はそれを見ることができません、そしてあなたもその一人です!通常表示されるクラスは、Klass をカプセル化したものにすぎません。実際にテンプレートに特定のメタ情報を記録するのは Klass です。若者よ、今回のことを思い出せ。

3.2 労働者

シャオ・チアン:なぜ従業員の身長が違うのですか?

[[428770]]

オブジェクトの長さ

老人:君は本当に観察力があるな!はい、確かに同等の違いがあります。理由を知りたい場合は、まずこれらの労働者がどのような構成要素で構成されているかを理解する必要があります。

オブジェクトの構成

頭の大きさは固定で、体の大きさは自身の属性データによって決まり、最終的な足は私が決めます。最初の 2 つのデータのサイズが 8 の倍数でない場合はそれを埋めるので、ここでのパディングによって高さの差が同じになります (メモリ アライメント)。

これらを作成した理由は 2 つあります。

プラットフォーム上の理由: すべてのハードウェア プラットフォームが任意のアドレスの任意のデータにアクセスできるわけではありません。一部のハードウェア プラットフォームでは、特定のアドレスにある特定の種類のデータにのみアクセスでき、それ以外の場合はハードウェア例外がスローされます。

パフォーマンス上の理由: 中枢脳 (CPU) は、メモリにアクセスするときにメモリ アクセスの粒度を持ちます。つまり、各メモリ アクセスの長さは固定されています。これを行わないと、中枢脳はメモリに 2 回アクセスする必要がありますが、アライメント後は 1 回だけで済みます。

小強:わかりました!では、なぜこれらの労働者は居住地域内を移動し続けなければならないのか教えていただけますか?

3.3 成長

老人:長い間観察していると、労働者一人ひとりの寿命の長さが違うことが分かりました。そこで、居住エリアを新世代と旧世代に分けて合理的に移転させ、スペースを有効に活用し、ゴミ収集チームがより効率的に作業できるようにしました。

ヒープ生成

労働者が生まれると、エデンエリアに割り当てられます。エデンエリアがほぼ満杯になると、ゴミ収集隊が清掃に来ます。清掃後、作業員がまだ生きている場合は、生存者エリアの 1 つに移動されます。このサバイバーエリアがほぼいっぱいになると、ゴミ処理班は生きている作業員を別のサバイバーエリアに移動させ、このプロセスを繰り返します。ゴミ収集班による清掃が終わるたびに、生き残った労働者たちは1歳ずつ年を取り、15歳になると、古い世代が住む場所に移されます。しかし例外もあります。労働者が太りすぎて、新しい世代が彼を受け入れることができない場合、彼は直接古い世代に移動します。古い世代がほぼいっぱいになると、ガベージ クリーンアップ (フル GC) が行われます。

シャオチアン:なるほど!これからは、ヒープ領域とスタック領域しか知らない初心者ではなくなります!ハハハハ…

老人:若者よ、あまりすぐに喜びすぎるな!これまでにあなたが知っていることは、まだほんの一部にすぎません。

3.4 死亡証明書

シャオチアン:労働者が寿命を迎えたかどうかはどうやって判断するのでしょうか?

1つ目: 参照カウント方式

各ワーカーに参照カウンターを追加します。つまり、誰かがこのワーカーの助けを必要としている限り、このワーカーのカウントは 1 増加します。逆に、他の人がこのワーカーの助けを必要としなくなった場合、カウントは 1 減少し、カウントが 0 に達すると、このワーカーの寿命が終わります。

しかし、このアプローチには問題があります。作業者 A と作業者 B が互いに助けを必要としているが、他の作業者やタスクが両者を必要としていない場合、両者は永久に存続することになります。 「したがって、我々はこのアプローチは採用しません。」

2番目の方法: アクセシビリティ分析

「GC ルート」と呼ばれるワーカーを開始点として識別し、次にそのワーカーが作業で依存しているワーカーを検索して、どのワーカーが存在する必要がないかを把握します。

Xiaoqiang: どれが「GC ルート」ワーカーであるかをどうやって知ることができますか?

老人:

ワークスペース(スタック)に必要なワーカー

ウェアハウス(メソッド領域)内のテンプレート(クラス)自体に必要なワーカー(静的、定数)

ワールドバックエンドに必要なワーカー(ネイティブ方式)

小強:わかった!

4. リサイクル

老人:今からゴミ収集班の人たちに会いに行くよ!しかし、それらを知る前に、ゴミ除去の基本的な方法論を理解しておく必要があります。

4.1 基本的な方法論

ガベージ コレクションには、いくつかの基本的な方法論があります。

  • マーク アンド スイープは、最初にリサイクルする必要があるすべてのワーカー (オブジェクト) をマークし、マーキングが完了したら、マークされたすべてのワーカーをリサイクルします。しかし、これには2つの欠点があります。1. 効率が低い 2. 断片化されたスペースが大量に生成される
  • レプリケーションでは、使用可能なスペースが 2 つの部分に分割され、一度にそのうちの 1 つのみが使用されます。ほぼ使い果たされると、チームはそれをリサイクルし、生きた労働者を他の部分に再配置します。これにより、マークアンドスイープの効率の問題は解決されますが、この方法ではスペースが半分に削減されます。
  • マーク アンド スイープは、最初にリサイクルする必要のあるすべてのワーカー (オブジェクト) をマークし、次に生き残ったワーカーをスペースの一方の端に移動してから、境界外のワーカーをクリーンアップします。

Xiaoqiang は笑って言いました: つまり、これらが 3 つのアルゴリズムなのですね!知っている!

老人: さあ、分かったら、私と一緒にゴミ収集チームの人たちに会いに来てください!

4.2 主要メンバー

ゴミ清掃チームは複数のチームで構成されています。お客様は、どのチームで作業したいかを指定できます。各チームの清掃方法は異なり、それぞれに長所と短所があります。

CMS チームと G1 チームという 2 つの主要メンバーを紹介します。

CMS: はい、私たちは CMS チームです。正式名称は「Concurrent Mark Sweep」です。名前が示すように、私たちはマークスイープアルゴリズムを使用する並行チームであり、最短の回復一時停止時間を取得することを目標としています。

シャオチアン:では、どうやって仕事をしているのか教えてください。

CMS: 主に4つのステップで作業します。1. 初期採点 2. 同時採点 3. 再採点 4. 同時クリア

シャオチアン:忘れてください。これらすべてのステップを理解するには時間がかかりすぎます。今、私はあなたの強みを知りました。あなたの弱点は何ですか?

CMS: これはどうして人の傷をさらす行為とみなされるのでしょうか…

そのとき老人は厳粛に二度咳払いをした。CMS はすぐにその意味を理解し、憤慨して言った。

私には3つの欠点があります:

  • リソースが十分でない場合、占有されるリソースが多すぎて、タスクの速度が低下します。
  • 浮遊ゴミを処理できません。私たちが掃除をしている間、作業員たちも働いていました。マークを付けた後、一部の作業員は不要になりました。
  • 私たちのチームは「マーク アンド スイープ」アルゴリズムに従っているため、断片化されたスペースが大量に生成され、ワー​​ルド クリーニング (フル GC) が早期に発生します。

率直なシャオ・チアンはこう言った。「あなたの問題がそれほど深刻だったため、老人はあなたのチームを解雇さえしなかったのです...」

CMS: そうですね...当時、私たちのチームはとても人気がありました...

ということは、G1 は CMS の欠点を補うことができるということでしょうか?

G1: 正直に言うと、私たちのチームの目標は CMS チームを置き換えることです... (JDK14 CMS は正式に終了しました)

小強は意地悪そうに笑った、ハハハ…、CMSは目を転がして隅に隠れ、悲しくなりました。

CMSコーナークライ

シャオチアン:それではG1、あなたの能力について教えてください!

G1: 私たちのチームはマークアンドスイープアルゴリズムに基づいているため、断片化されたスペースがあまり生成されません。

  • また、パーティショニングの考え方を導入し、世代の概念を弱めました。
  • 雪崩現象を回避するために一時停止時間を制御できます
  • 顧客から提供されたリソースを最大限に活用し、ダウンタイムを削減することもできます

これが私たちのチームの強みです。次に、私たちのチームについて詳しく紹介させていただきます。

小強:OK!続けてください...

戻る

小強が興味深く聞いていたちょうどその時、突然空に巨大な手が現れて彼を攻撃した。小強はそれを避けられなかった。ああ…

大きな平手打ち

シャオチアンは頭を覆い、少しぼんやりした気分になった。彼は顔を上げて、「くそっ、テクニカルディレクター... 君もなぜここにいるんだ?」と言いました。

監督: 私がここにいなければ、どこにいるのでしょうか?私は家で寝ているのでしょうか?

この時、小強は我に返り、自分がまだオフィスにいることに気づいた。何か悪いことが起こっていました!

監督:シャオチアン、家に帰って本当によかった。明日は来なくてもいいよ!

シャオ・チアンはパニックに陥ったが、ある考えが頭に浮かんだ。「部長、私が今何をしていたか知っていますか?」私は眠っていませんでした。決断する前に聞いてほしい話があります。

何とか何とか…

この記事に不適切な点があると思われる場合は、メッセージを残してお知らせください。この記事が気に入ったら、「いいね!」を押して応援してください。

<<:  StreamNative、Prosperity7 VenturesとHuatai Innovationが主導する2,300万ドルのシリーズA資金調達ラウンドを発表

>>:  クラウドネイティブの AWS サービスを活用してセキュリティ体制を強化するにはどうすればよいでしょうか?

推薦する

SideCarは死んだのか?

編集者 |イーサン企画 |趙雲サイドカーの概念は、コンテナとマイクロサービスの世界では非常に一般的に...

SEOのコア競争力を分析する SEOにこだわってください

今日の SEO の発展は、SEO 担当者だけでなく、多くの事業主にとっても頭痛の種となる可能性があり...

Baidu の外部リンク アルゴリズムの更新後、推奨されない外部リンクはどれか

4月25日、Baiduはウェブマスタープラットフォームを通じて「外部リンクの判断について」と題した発...

ユーザーエクスペリエンスを満たす高品質な記事の書き方

ウェブサイトの最適化は簡単そうに見えますが、操作には注意を払うべき細かい点がたくさんあります。今日は...

Baiduさん、申し訳ありませんが、誤解していたかもしれません。

多くの企業は、Baidu からプロモーションの電話を頻繁に受け、時々挨拶を受けます。編集者のクライア...

「神駅」九日重6の秘密を詳しく解説

みなさんこんにちは。ロン・ジュンです。今日、私は偶然、A17 コラムニスト グループで非常にクールな...

hostkvm: 「618」イベント、VPS 38% 割引、オプション: 香港、日本、米国の高防御

Hostkvm の 618 イベント: (1) シンガポール、日本、米国の場合、プラン 1 で月額支...

包括的な検索の登場により、ウェブサイトの品質はますます重要になるだろう

8月16日に360総合検索がひっそりとリリースされたことで、360ブラウザは膨大なユーザーベースとデ...

2022年に注目すべきクラウドコンピューティングの5つのトレンド

企業がデータ駆動型のビジネス モデル、リモートおよびハイブリッド作業環境を採用するにつれて、クラウド...

おすすめ: turnkeyinternet - ブラックフライデーで25%オフ

毎年恒例のブラックフライデーがやって来ました。スーパーカーニバルプロモーションも開催中です。Turn...

Weiboが再び成長軌道に戻るのは難しいのでしょうか?

国内最大の「ファンが集まる場所」であるWeiboのホットな検索リストには、有名人のゴシップ、人気の映...

5Gとエッジコンピューティングを組み合わせる利点は何ですか?

速度の向上とレイテンシの短縮は、5G とエッジ コンピューティングの組み合わせが今日非常に人気となっ...

greenvaluehost-3g メモリ/150g ハードディスク/200m 無制限

3g メモリ/150g ハードディスク/200m 無制限、月額 5 ドル、ご興味ありますか?バックア...

簡潔な分析:業界別B2Bウェブサイト運営方法

前回の記事「市場セグメンテーション: ウェブマスターの起業の春」で、業界のウェブサイト運営に関する記...