コア基盤: JVM とは何かを理解しますか? Java仮想マシンの本質を理解する

コア基盤: JVM とは何かを理解しますか? Java仮想マシンの本質を理解する

[[258795]]

Java 仮想マシンは、他のプログラムを実行することを目的としたプログラムです。これは単純な概念であり、Kung Fu *** のコーディング例の 1 つです。 JVM は当時の現状を打破し、今日でもプログラミングの革新をサポートし続けています。

1. JVMの使用法と定義

JVM には、Java プログラムを任意のデバイスまたはオペレーティング システムで実行できるようにする機能 (「一度記述すれば、どこでも実行できる」という原則として知られています) と、プログラム メモリを管理および最適化する機能という 2 つの主な機能があります。 1995 年に Java がリリースされたとき、すべてのコンピュータ プログラムは特定のオペレーティング システム用に記述され、プログラムのメモリはソフトウェア開発者によって管理されていました。したがって、JVM は新しいモデルの啓示です。

図1: JVMの高レベルビュー

ソフトウェア開発者が一般的な観点から JVM について考えることができるように、JVM の技術的な定義があると便利です。これは次のように分類できます。

  • 技術的な定義: JVM は、コードを実行し、そのコードの実行環境を提供するソフトウェア プログラムの仕様です。
  • 一般的な定義: JVM は Java プログラムを実行する方法です。 JVM の設定を構成し、実行中にプログラム リソースを管理するために JVM に依存します。

開発者が JVM について話すとき、通常はマシン、特にサーバー上で実行され、Java アプリケーションのリソース使用率を表し、制御するプロセスを意味します。これらは、これらのタスクを実行するプログラムを構築するための要件を記述する、いわゆる JVM 仕様と呼ばれる JVM 仕様を参照して実装されます。

では、JVM を開発し、保守するのは誰でしょうか?

——JVM は、非常に優秀なプログラマー、企業、オープンソース組織によって広く導入され、頻繁に使用され、アップグレード、開発、保守されています。 OpenJDK プロジェクトは、Sun Microsystems が Java をオープンソース化するという決定から生まれました。 Sun は Oracle に買収され、OpenJDK は引き続き Oracle によって Java 向けに管理されており、Oracle のエンジニアが現在多くの重労働を行っています。

2. JVM におけるメモリ管理

実行中の JVM との最も一般的なやり取りは、ヒープとスタック内のメモリ使用量を調べることです。最も一般的な調整は、JVM のメモリ設定を調整することです。

2.1.ガベージコレクション

Java 以前は、すべてのプログラム メモリはプログラマーによって管理されていました。 Java では、プログラム メモリは JVM によって管理されます。 JVM は、ガベージ コレクションと呼ばれるプロセスを通じてメモリを管理します。ガベージ コレクションは、Java プログラム内の未使用のメモリを継続的に識別して削除します。ガベージ コレクションは実行中の JVM 内で行われます。

初期の頃、Java は C ほど「ハードウェアに近い」ものではなく、したがってそれほど高速ではないという批判を多く受けました。ゴミ収集プロセスは特に論争を呼んでいる。それ以来、ガベージコレクションにはさまざまなアルゴリズムと方法が提案され、使用されてきました。互換性の開発と最適化に加えて、ガベージ コレクションも大幅に改善されました。

注: 本質に近づくとはどういう意味ですか?

--プログラマーがプログラミング言語またはプラットフォームが「原始的に近い」と言う場合、開発者がプロ​​グラム的に(コードを記述することによって)オペレーティング システムのメモリを管理できることを意味します。理論的には、プログラマーはメモリをどれだけ使用し、いつ破棄するかを指示することで、プログラムからさらに高いパフォーマンスを引き出すことができます。ほとんどの場合、メモリ管理を JVM などの高度に洗練されたプロセスに委任すると、自分で管理するよりもパフォーマンスが向上し、エラーが少なくなります。

3. JVMは3つの部分に分かれている

JVM 仕様

まず、JVM はソフトウェア仕様です。 JVM 仕様では、特定の通知または発表形式で要件を表現し、実装の詳細が仕様で具体的に定義されていないことを強調しています。これにより、実装において最大限の創造性を実現できます (次の通知で要求されているように)。

「Java 仮想マシンを正しく実装するには、クラス ファイル形式を読み取り、そこに指定された操作を正しく実行できれば十分です。」

次のような例もあります。J.S. バッハはかつて音楽の創作を次のように表現しました。

「必要なのは、適切なタイミングで適切なキーを押すことだけです。」

したがって、JVM が行う必要があるのは、Java プログラムを正しく実行することだけです。単純に聞こえますし、外から見ると単純に見えるかもしれませんが、特に Java 言語のパワーと柔軟性を考えると、難しい作業です。

JVM は仮想マシンであり、さらに次のように説明できることに注意してください。

JVM は、Java クラス ファイルを移植可能な方法で実行する仮想マシンです。仮想マシンであるということは、JVM が、プログラムが実行されているサーバーなどの基盤となる実際のマシンを抽象化したものであることを意味します。 JVM は、実際に存在するオペレーティング システムやハードウェアに関係なく、プログラムを実行するための予測可能な環境を作成します。ただし、真の仮想マシンとは異なり、JVM は仮想オペレーティング システムを作成しません。 JVM を管理されたランタイム環境またはプロセス仮想マシンとして説明する方が正確でしょう。

3.2.JVM実装

JVM 仕様を実装すると、JVM 実装である実際のソフトウェア プログラムが生成されます。実際、オープンソースと独自の両方の JVM 実装が多数存在します。 OpenJDK の HotSpot JVM はリファレンス実装であり、世界で最も徹底的に試行されテストされたコードベースの 1 つです。 HotSpot は最も一般的に使用される JVM でもあります。

ライセンスされた JVM のほぼすべては、Oracle のライセンスされた JDK を含め、OpenJDK および HotSpot JVM のフォークとして作成されます。 OpenJDK から許容フォークを作成する開発者は、多くの場合、オペレーティング システム固有のパフォーマンス向上を追加したいと考えています。通常、JVM は Java Runtime Environment (JRE) にバンドルされた一部としてダウンロードしてインストールします。

JVMの例

JVM 仕様が実装され、ソフトウェア製品としてリリースされると、それをダウンロードしてプログラムとして実行できるようになります。ダウンロードされたプログラムは、JVM のインスタンス (またはインスタンス化されたバージョン) です。

ほとんどの場合、開発者が「JVM」について話すときは、ソフトウェア開発環境または実稼働環境で実行されている JVM インスタンスを指しています。 「Solo さん、このサーバーの JVM はどのくらいのメモリを使用しているのですか?」と疑問に思うかもしれません。または、「ループを作成してスタック オーバーフロー エラーによって JVM がクラッシュしたなんて信じられません。なんて初心者のミスでしょう!」

ヒント: ソフトウェアの仕様とは何ですか?

ソフトウェア仕様 (または仕様) は、ソフトウェア システムがどのように動作するかを記述した、人間が読める設計文書です。仕様の目的は、エンジニアがコードを記述するための明確な説明と要件を作成することです。

4.JVMがクラスファイルをロードして実行する

Java アプリケーションの実行における JVM の役割については説明しましたが、JVM の機能はどのように実行されるのでしょうか。 Java アプリケーションを実行するために、JVM は Java クラス ローダーと Java 実行エンジンに依存します。

Java クラスローダー

Java のすべてがクラスであり (またはすべてがクラスである)、すべての Java アプリケーションはクラスから構築されます。アプリケーションには 1 つのクラスまたは数千のクラスを含めることができます。 Java アプリケーションを実行するには、JVM はコンパイルされた .class ファイルを、アクセス可能なコンテキスト (サーバーなど) にロードする必要があります。 JVM はこの機能を実行するためにクラスローダーに依存します。

Java クラス ローダーは、クラスをメモリにロードして実行できるようにする JVM の一部です。クラス ローダーは、遅延読み込みやキャッシュなどの手法を使用して、クラスの読み込みを可能な限り効率的にします。とはいえ、クラスの読み込みは、たとえばポータブルなランタイム メモリ管理のための壮大な難問ではありません。つまり、その手法は比較的単純です。

すべての Java 仮想マシンにはクラスローダーが含まれています。 JVM 仕様では、実行時にクラス ローダーを照会および操作する標準的な方法が説明されていますが、これらの機能を実装するのは JVM 実装の責任です。開発者の観点から見ると、基礎となるクラスローダーのメカニズムは通常ブラックボックスです。通常、特定の JVM 実装には複数のクラス ローダーがあることに注意してください。

4.2.Java実行エンジン

クラス ローダーがクラスのロードを完了すると、JVM は各クラスのコード実行を開始します。実行エンジンは、この機能を処理する JVM コンポーネントです。実行エンジンは JVM を実行するために不可欠です。実際、実用的な目的においては、それは JVM インスタンスです。

コードを実行するには、システム リソースへのアクセスの管理が必要です。 JVM 実行エンジンは、実行中のプログラム (ファイル、ネットワーク、およびメモリ リソースの要求を含む) とそれらのリソースを提供するオペレーティング システムの間に配置されます。

4.3.実行エンジンがシステムリソースを管理する方法

システム リソースは、メモリとその他すべての 2 つの主要なカテゴリに分けられます。

未使用のメモリを破棄するのは JVM の役割であり、ガベージ コレクションはこの破棄を実行するメカニズムであることを思い出してください。 JVM は、開発者が当然のことと考えている参照構造の割り当てと維持も担当します。たとえば、JVM の実行エンジンは、Java の new キーワードのようなものを取得して、それをオペレーティング システム固有のメモリ割り当て要求に変換する役割を担っています。

実行エンジンは、メモリ管理に加えて、ファイル システム アクセスとネットワーク I/O のリソースも管理します。 JVM はオペレーティング システム間で相互運用可能であるため、これは簡単な作業ではありません。実行エンジンは、各アプリケーションのリソース要件に加えて、各 OS 環境にも対応する必要があります。これは、JVM が内部のニーズを処理できる方法です。

5. JVM の進化: 過去、現在、そして未来

1995 年に JVM は、「一度書けばどこでも実行できる」と自動メモリ管理という、それ以来現代のソフトウェア開発の標準となっている 2 つの革新的な概念を導入しました。ソフトウェアの相互運用性は当時は大胆な概念でしたが、今日ではそれについて二度考える開発者はほとんどいません。同様に、私たちのエンジニアリングの先駆者たちはプログラム メモリを自分で管理する必要がありましたが、私の世代はガベージ コレクターとともに成長しました。

ジェームズ・ゴスリングとブレンダン・アイクが現代のプログラミングを発明したと言えますが、その後の数十年間で何千人もの人が彼らのアイデアを洗練させ、取り入れてきました。 Java 仮想マシンはもともと Java 専用に設計されていましたが、現在では Scala、Groovy、Kotlin など、多くのスクリプト言語やプログラミング言語をサポートするようになりました。将来を見据えると、JVM が開発環境の大きな部分を占めなくなる(依然として重要な部分である)未来を想像するのは難しいでしょう。

6. 結論

この記事では、JVM の概要を説明します。具体的な設計内容は多数ありますが、ここでは詳しく説明しません。さらに理解を深めるために、このアカウントで公開されている関連記事を読んでください。最後に、Java 仮想マシンをより直感的に理解して認識できるように、JVM 構成図を使用してこの記事を要約します。

Java 仮想マシン実装アーキテクチャ リファレンス

JVM の重要なコンポーネントを理解するためのこの記事はこれで終わりです。特定の JVM については、短いオンライン記事では完全には説明できません。

<<:  Project EVE はエッジコンピューティングへのクラウドネイティブアプローチを推進します

>>:  高可用性ソリューションは、クラウド時代の企業にとって重要な選択肢となっている。

推薦する

10月10日のBaiduのスナップショットがまたおかしいです。気づきましたか?これは何を示していますか?

今日、Baidu が小さなアップデートを行いました。アップデート後、データを整理してデータ分析を行い...

SEO 外部リンク最適化戦略: まだ包含だけを気にしていますか?

いつからかは覚えていませんが、SEOの外部リンク操作は役に立たないという話をよく聞きました。とにかく...

分散ストレージシステムの雪崩効果

1. 分散ストレージシステムの背景レプリカは分散ストレージ システムの一般的な概念です。特定のサイズ...

企業サイト制作の難しさと簡単さ

私はウェブサイト開発会社で1年以上働いています。時間が経つのは本当に早いですね。学校を卒業したばかり...

SEO 成功ウェブサイト事例 1: Bobao Mall

最近、大手サイトにいくつかの記事を投稿しましたが、転載の数は悪くなく、基本的に100を超えています。...

UCloud が「クラウド サービス ユーザー データ保護能力評価」の権威ある認証を初めて取得

最近、国内の権威あるクラウドコンピューティング評価システムであるTrusted Cloudが北京で記...

製品ハイライト|Anweisi データベース監査 - バインディング変数監査

機能紹介データセキュリティ管理エキスパート - コアデータを保護し、ネットワークセキュリティを防御し...

主要なインターネットイベントに関する推測と雑談、そして2011年の概要

主要なインターネットイベントに関する推測と雑談、そして2011年の概要現在、インターネットは急速に発...

sugarhost: 香港 VPS (Xen)、帯域幅のアップグレード、価格変更なし、Alipay が利用可能

シュガーホストは香港データセンターのVPSの構成をアップグレードすると発表しましたが、価格は変更あり...

企業はジュメイからビジネスの真の意味を探り、他人の真似をしないべきだ

「美に焦点を当て、大人の美しさを促進する」という意味を持つジュメイは、シンプルで面白く、信頼できる化...

Baidu ウェブマスター プラットフォーム: Baidu スナップショットの問題に関する説明

長い間、一部のウェブマスターは、Baidu スナップショットの更新時間について誤解しており、ウェブサ...

製品設計におけるユーザーの「Gスポット」 ユーザーとともに製品を開発

ユーザーの「Gスポット」とは何でしょうか? ここでは、この G スポットを次のように定義します: ユ...

理想的なSEOブログについて語る

月収10万元の起業の夢を実現するミニプログラム起業支援プランSEO ブログを作成するには?私の意見で...