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

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

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 つの記事で理解する

推薦する

cleanvps-256Mメモリxen月額支払い3.98米ドル

Cleanvps は、公式によると 4 年の歴史があるとのことですが (これを追求する必要はありませ...

ネットワークマーケティングの正確な方法

インターネットの発展に伴い、オンラインマーケティングはますます人気が高まっています。今日では、オンラ...

fadayun: 9.9元のフラッシュセール、湖北100G高防御/CC無視、2Gメモリ/2コア/50gハードディスク/8M帯域幅、香港/韓国/米国CN2クラウドは39元から

fadayunは現在、春のスタートに向けて特別プロモーションを開催しています。湖北クラウドサーバーは...

ウェブサイトの最適化はランキングのためですか、それともユーザーエクスペリエンスのためですか?

ウェブサイトの最適化とは何でしょうか。百科事典では非常にわかりやすく説明されていると思います。しかし...

ブランドマーケティングを構築し、収益を上げるためのWeiboの合理的な使用

オンラインマーケティングには、オンラインマーケティングを実現する方法が数多くあります。Weiboマー...

トラフィック獲得のための4つのチャネルと戦略

インターネット時代においては、電子商取引であれ、オフラインの実店舗であれ、トラフィックの考え方を持つ...

中国のクラウドコンピューティング市場はどのように規制されていますか?

国内外の規制当局には、IP が物理マシンによってサポートされているか仮想マシンによってサポートされて...

Baidu の新規サイトインデックスのルール

7月と8月以来、Baiduは新しく立ち上げられたウェブサイトに対して非常に怒っているかもしれない。こ...

内部リンクのnofollowは重みの配分を制御する

nofollow属性が導入された後、Matt Cutts氏は何度も、フォーラムやブログなどのコメント...

クラウドストレージに隠されたデータを見つける方法

クラウド オブジェクト リポジトリが事実上のデータ レイクになるにつれ、企業は蓄積されるすべてのデー...

SEO最適化の基本: ウェブページ要素の最適化

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています1. ペー...

Google+の質問機能がGoogle検索結果ページに統合されました

北京時間1月22日、外国メディアの報道によると、GoogleがソーシャルネットワークGoogle+に...

モバイルアプリモールシステムの成功の鍵

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますテクノロジ...

中国の外部リンク専門家の悲しさについて語る

SEO 作業において、外部リンクの専門家は極めて重要なポジションです。外部リンクは SEO 最適化に...