仮想マシンとは何ですか?知っていましたか?

仮想マシンとは何ですか?知っていましたか?

1. 要約

ご存知のとおり、Java は長年の開発を経て、単純なコンピュータ プログラミング言語から成熟したソフトウェア ソリューションへと進化しました。インターネットからエンタープライズ プラットフォームまで、Java は現在最も広く使用されているプログラミング言語です。

以下の内容はJavaの公式紹介からの抜粋です。

ラップトップからデータセンター、ゲーム機から科学用スーパーコンピュータ、携帯電話からインターネットまで、Java はあらゆるところに存在しています。

インターネット企業であれ、伝統的な企業であれ、デジタルプラットフォームシステムを開発する場合、世界のほとんどの企業は、企業のデジタル変革を支援し、生産効率を向上させるために、基本的にJavaを選択して開発します。セキュリティ、安定性、高性能、クロスプラットフォームなど、理由はたくさんあります。実は、もう一つ大きな利点があります。人材の採用が簡単だということです、ハハハ~

Java が非常に魅力的な理由は、その優れたプログラミング言語設計だけでなく、仮想マシン プラットフォームの設計によるところもあります。仮想マシンを通じて、アプリケーションを複数のプラットフォーム間で簡単に実行できるため、「一度記述すればどこでも実行できる」という目標が達成され、優れた運用効率が実現します。

2. Java入門

仮想マシンを紹介する前に、Java の開発の歴史を簡単に振り返ってみましょう。

Java は、1990 年代初頭に SUN の少人数のエンジニア チームによってプログラミング言語として最初に開発されました。プロジェクトのリーダーは James Gosling 氏 (Java の父として知られる) でした。このプログラミング言語は当初、オフィスの外にあるオークの木にちなんで Oak と名付けられました。その後、Oak が誰かによって登録されたため、Java に名前が変更されました。

ここに、Java の父の素晴らしい写真を添付し​​ます。

写真

当時の目標は、セットトップボックス、スマートテレビ、その他のデジタルデバイスなど、デジタルケーブルテレビ業界の組み込みアプリケーションを開発し、トラブルのない動作を実現することでした。その結果、発売後、市場からの反応はほとんどありませんでした。 4年後、技術チームは解散しなければなりませんでした。

しかし、この頃はインターネットが登場したばかりでした。偶然にも、Mark Ardreesen が開発した Mosaic と Netscape が Oak プロジェクト チーム メンバーにインスピレーションを与えました。彼らは Java を使用して HotJava ブラウザを作成しました。 HotJava は、Web ページ内で Java コードを実行する機能を備えており、さまざまなコンピュータ デバイスでスムーズに実行できます。この影響は Sun の CEO である Scott McNealy によって支持され、Java がインターネットに参入する決意が引き起こされました。

これは当時大きな騒ぎとなり、人々はインターネットの将来がどのようなものであるべきかを知ったようでした。一時期、Java は多くのメーカーや開発者から求められていました。そこで Sun は、鉄が熱いうちに打って出て、1996 年に JDK1.0 を正式にリリースしました。当時の 10 大オペレーティング システム メーカーは、自社のシステムで Java プログラムの実行をサポートすると発表しました。それ以来、インターネットの急速な発展の中で、Java は大ヒットとなりました。

インターネットの発展において Java が開発者から幅広い支持を得ている重要な理由の 1 つは、「一度書けばどこでも実行できる」という効果を実現し、ソフトウェア開発の作業負荷を大幅に軽減できることです。この効果は主に Java のアーキテクチャ概念設計によって実現されます。

C や C++ などのプログラミング言語は、コードを直接マシンコードにコンパイルして実行します。これは非常に高速ですが、異なるプラットフォーム (x86、ARM など) 上の CPU の命令セットも異なります。アプリケーションを開発するたびに、対応するマシンコードを各プラットフォーム用にコンパイルする必要があり、非常に面倒です。

Javaは違います。コードを抽象的な CPU 命令に似た「バイトコード」にコンパイルします。仮想マシンは、バイトコードを読み込み、さまざまなプラットフォームに応じて対応するマシン コードにコンパイルして実行する役割を担い、「一度書けばどこでも実行できる」という効果を実現します。

写真

もちろん、仮想マシンはプラットフォームごとに個別に開発する必要があります。異なるプラットフォームや異なる企業によって開発された仮想マシンが Java バイトコードを正しく実行できることを保証するために、SUN は一連の Java 仮想マシン仕様を開発しました。実用的な観点から見ると、仮想マシンの互換性は非常に良好であり、下位バージョンの Java バイトコードは上位バージョンの仮想マシン上で正常に実行できます。

JDK の内部構造全体は次のようにまとめられます (図は Liao Xuefeng の Java 入門から引用)

写真

JDK、JRE、JVM の関係を簡単に説明すると、次のようになります。

  • JDK (Java Development Kit): コンパイラ、デバッガ、Java APIクラスライブラリ、Java仮想マシンなどを含むJava言語ソフトウェア開発キットを指し、通常は開発環境で使用される。
  • JRE (Java Runtime Environment): Java API クラス ライブラリ、Java 仮想マシンなどを含む Java ランタイム環境を指します。通常は Java アプリケーションを実行するために使用され、通常は実稼働環境で使用されます。
  • JVM (Java仮想マシン): さまざまなプラットフォームでJavaアプリケーションを実行するために使用されるJava仮想マシンを指します。

JVM は、Java アプリケーションを複数のプラットフォームで実行できるようにするコアであることが明確にわかります。したがって、JVM 関連の知識を理解して学習することは、開発者が Java 関連のテクノロジーをより包括的に理解するのに役立ちます。

オペレーティング システムのコマンド ラインで java -version と入力して、現在の JDK が使用している仮想マシンのバージョンを確認します。

写真

3. 仮想マシンの概要

Java 仮想マシンに関して言えば、多くの開発者は、上のスクリーンショットに示すように、まず HotSpot 仮想マシンを思い浮かべるかもしれません。

実際、HotSpot の他に、Sun Classic VM、Exact VM、BEA JRockit VM、IBM J9 VM なども存在します。仮想マシンの開発プロセスは、「百の花を咲かせる」という 4 つの言葉で要約できます。

3.1 サンクラシックVM

1996 年に Sun が JDK 1.0 をリリースしたとき、それに付属していた仮想マシンは Classic VM でした。この仮想マシンは、純粋なインタープリタ アプローチを使用して Java コードを実行します。簡単に言えば、現在のようにコンパイラを介してコードを実行するのではなく (最初にコンパイルしてから実行する)、コードを解釈しながら実行します。 Sun Classic 仮想マシンでは、インタープリタとコンパイラが共存できないため、Java アプリケーションの実行速度は確実に速くなるわけではなく、十分であるとしか言えません。

1998 年に Sun が JDK 1.2 をリリースしたとき、同社は Classic VM で発生したすべての問題を解決しようとする Exact VM と呼ばれる仮想マシンも発表しました。その実行システムは、インタープリタとコンパイラが同時に動作できないという Classic VM の問題を解決し、2 レベルのジャストインタイム コンパイルや正確なメモリ管理など、最新の高性能プロセッサの機能も備えています。

残念ながら、この仮想マシンは大規模に使用されたことはなく、Sun Classic VM は今でもデフォルトの Java 仮想マシンです。

3.2 ホットスポットVM

2000 年に Sun が JDK 1.3 をリリースしたとき、HotSpot VM がデフォルトの Java 仮想マシンとなり、広く普及する Java 仮想マシンになると発表しました。

実際、この仮想マシンは Sun によってネイティブに開発されたのではなく、Longview Technologies という会社によって開発されました。 Sun は、JIT コンパイルにおけるこの仮想マシンの優れた成果の数々に注目し、1997 年に Longview Technologies を買収して HotSpot VM の所有権を取得しました。

HotSpot VM は、上記の 2 つの仮想マシンの利点を備えているだけでなく、ホットスポット検出テクノロジなど、独自の新しいテクノロジも多数備えています。ホットスポット検出テクノロジーとは、実行カウンターを通じて最も最適化されたコードを見つけ、メソッドごとに高度な最適化コンパイルを実行するよう JIT コンパイラに通知することを指します。

実は、Exact VM にも同様の技術がありますが、最終的には HotSpot がデフォルトの仮想マシンとして選択されました。

HotSpot VM がデフォルトの Java 仮想マシンになってから、現在に至るまで最もよく使用されている仮想マシンであり、HotSpot VM の粘り強さが証明されています。

3.3. BEA JRockit/IBM J9 VM

前回の記事では、Sun Microsystems が開発した仮想マシンについて説明しました。ただし、Sun Microsystems 以外にも、他の組織や企業も多数の仮想マシン実装を開発しています。最も有名なのは、BEA の JRockit VM と IBM の J9 VM です。

JRockit VM は、HotSpot の他によく知られている仮想マシンです。 BEA は 2002 年にこの仮想マシンの開発者を買収しました。この仮想マシンは長い間、世界最速の Java 仮想マシンとして知られています。これはサーバー側アプリケーションに重点を置いた仮想マシンであり、そのガベージ コレクション アルゴリズムは他のすべての仮想マシンよりも優れたパフォーマンスを発揮します。さらに、提供される MissionControl サービス スイートも非常に強力です。

IBM の J9 VM は、より汎用的な仮想マシンであり、サーバーからデスクトップ アプリケーション、組み込みシステムに至るまで、多目的仮想マシンで使用されるように位置付けられています。 IBM は、さまざまな Java 製品の実行プラットフォームとして機能する J9 VM を開発しました。わずかな違いは、IBM J9 VM は IBM 製品でのみ使用できることです。技術的な制限はありませんが、別途商用ライセンスが必要です。

J9 VM のパフォーマンス レベルは、HotSpot VM とほぼ同じです。シナリオによっては、HotSpot VM の方が高速な場合もあれば、J9 VM の方が高速な場合もあります。

3.4 その他のJVM

HotSpot、JRockit、J9 の 3 つの仮想マシンは、長い間、3 つの主要な主流 JVM として知られていました。これらは、Java 仮想マシン開発の歴史の中で最も輝かしい部分であると言えます。また、実は狭い範囲で様々な仮想マシンが使われています。

たとえば、Azul VM や BEA Liquid VM などの専用の商用仮想マシンは非常に強力なパフォーマンスを備えており、少なくとも数十個の CPU と数百 GB のメモリ リソースを管理できます。また、膨大なメモリ範囲内で制御可能な GC 時間を実現できるガベージ コレクターなども提供されます。これらの仮想マシンは特定のハードウェア プラットフォームでのみ実行されるため、要件は比較的高くなります。

さらに、Apache Harmony、Google Android Dalvik VM、Mircosoft JVM など、それぞれの分野で役割を果たす仮想マシンが数多くあります。

3.5、オラクル

サンの技術がこれほど強力だとは誰も予想していなかったが、その後数年間で徐々に衰退していった。販売と運営に関する知識が不足していたため、会社の財務は徐々に損失を被っていった。 2009年、オラクルは現金74億ドルでサンを買収した。

以前、Oracle は 2008 年に BEA を買収し、JRocket VM の所有権を取得しました。これは、JRockit と HotSpot の両方が Oracle によって所有されていることを意味します。

実は、JDK1.8 の HotSpot VM は、以前の HotSpot VM と JRockit VM を統合したバージョンであり、伝説の「HotRockit」ですが、製品名は依然として HotSpot VM と呼ばれています。

JVM の今後の開発はどんどん良くなっていくと思いますので、楽しみに待ちましょう!

IV.まとめ

この記事では主にJavaの開発の歴史に焦点を当て、仮想マシンの誕生の歴史をまとめています。次回以降の記事では、JVM 関連の知識をまとめて共有します。説明に不正確な点がある場合は、メッセージを残して指摘してください。どうもありがとうございます!

5. 参考

1.https://www.liaoxuefeng.com/wiki/1252599548343744/1255876875896416

2.https://www.cnblogs.com/xrq730/p/4826691.html

3.https://www.cnblogs.com/chanshuyi/p/jvm_serial_02_the_history_of_jvm.html

<<:  Dockerはどのように機能しますか?知っていましたか?

>>:  Traefik Proxy v3.0 の画期的な機能を 1 つの記事で理解する

推薦する

オンラインマーケティング記事を書く上で、人間化は最優先事項です

哲学的に言えば、法則は客観的な事物の発展過程における本質的なつながりであり、事物の発展の必然的な傾向...

Google検索エンジンの原理

本稿では、ハイパーテキスト アプリケーションで広く使用されている大規模検索エンジンのプロトタイプであ...

左がWeChatマーケティング、右がWeiboマーケティング

WeChatの誕生以来、そのユーザー数の急激な増加、Tencentの注目度の高さ、そしてWeiboと...

ローカルキーワードを最適化して征服するのは非常に簡単です

私が始めたばかりの頃、SEOの宿題「中山ウェブサイトプロモーション」にしばらく苦労していたことを覚え...

クラウド時代の再編における Amazon Web Services China Summit 上海の違いは何でしょうか?

[51CTO.com からのオリジナル記事] Amazon Web Services Technol...

コンテンツと最適化、どちらを好みますか?

最近、多くの SEO 担当者が、ウェブサイトの構築はコンテンツ次第であり、最適化しすぎると K され...

オンラインで新年を祝う新しい方法:春節期間中の若者のインターネット生活を理解する!

春節がインターネットと出会うとき、新年の雰囲気がオフラインからオンラインへと広がります。同じ新年の習...

domain.com、ドメイン名5ドル/年、長年登録可能.comと.net

低価格の .com および .net ドメイン名を登録したい方へ: EIG グループ傘下の doma...

ウェブマスターネットワークからの毎日のレポート:オンライン金融管理はリスクがあり、アリババの全体的なIPOは差し迫っています

1. ジャイアントがChinaHRを低価格で販売:中国での失敗は気候と環境の悪さが原因モンスター(N...

新しいウェブサイトを公開した後の最適化の 4 つの成長段階

フェーズ1: 新しいウェブサイトの立ち上げ「権威の高いウェブサイトに外部リンクを残す」か「Baidu...

hosteons: 安価な米国 VPS、月額 2 ドル、1G メモリ/1 コア/15g SSD/2T トラフィック/10Gbps 帯域幅、ロサンゼルス/ポートランドを含む 6 つのデータセンター

Hosteonsは現在、米国のデータセンターにあるすべてのVPSに対して特別プロモーションを提供して...

SEO は死んだのか? SEO の今後の方向性は?

「Forbes: SEO は終わり、ソーシャル リアルタイム コンテンツが人気」という記事があります...

いくつかのビットコイン取引プラットフォームが共同で自主規律声明を発表

テンセントテクノロジーニュース(ファン・シャオドン)5月6日のニュースによると、国内のビットコイン取...

クラウドコンピューティングの世界におけるデータアーキテクチャの再考

今日、データ分析ソリューションが登場しています。データ チームは、アクセス、データの整合性、セキュリ...

Zhubajie CEO 朱明月氏:プラットフォームは最も難しいビジネス

2014年5月25日、IDG Capitalが全額出資し、創業邦が共催した第11回IDGキャンパス起...