JVMとは?Javaの実行環境の仕組みを図でわかりやすく解説!
JavaやJVM言語と呼ばれるプログラミング言語が動作するためには、
この「JVM」「Java仮想マシン」が必要不可欠です。
Java仮想マシンは簡単に言えば、JavaやJVM言語を動かすためのソフトウェアみたいなものです。
そしてメリットは、書いたプログラムがOSに依存しないこと。
言い換えれば、どんなOS(Windows,Linux,Macなど)でも正常に機能することと言えます。
今回はこのJVM(Java仮想マシン)の仕組みをわかりやすく解説していきます。
- JVM-Java仮想マシンとは?
- Javaの実行環境はどういう仕組み?
- JVMの仕組みのメリットは?
それでは解説していきます!
JVM-Java仮想マシンとは?
JVMとは、「Java Virtual Machine」の頭文字をとった単語です。
日本語に訳して「Java仮想マシン」と言ったりもします。
マシンとは言いますが、「仮想」マシンなので、実際にそういう機械・ハードウェアがあるわけではありません。
PC上にインストールされているソフトウェアのことを指しています。
皆さんがお使いのPCにも入っているのではないでしょうか?
上が実行環境、下が開発環境なのですが、上の実行環境の中に、JVMが入っています。
Javaで生成されたコードは、一度この実行環境のJVMでもう一度変換され機械語になります。
その辺の説明をしていきます。
Javaの実行環境の仕組み:JVMはどのように働く?
まず、プログラミング言語Javaでプログラムを書きます。
これを「ソースコード」と呼ぶことにしましょう。
次は、そのソースコードをJavaのコンパイラを通して、「バイトコード」と呼ばれる中間コードに変換します。
このバイトコードはそのまま実行することはできません。(まだ完全に機械語になっていない)
そして、このバイトコードは、JVMによってそれぞれのOSにあった機械語に翻訳されます。
つまり、JVMがOSの違いを吸収するクッション材となってくれているのです。
このように、Javaの実行環境は、間にJVMが挟まっているという点で特徴的です。
Javaの実行環境は、JVMがOSの違いを吸収してくれので、JVMがそのOSに対応していれば、プログラムを正常に動作させることができるのです。
ようは、
- WindowsにはWindows用のJVM
- macにはmax用のJVM
- LinuxにはLinux用のJVM
がインストールされていれば、どのOSでも正常にプログラムが機能するのです。
JVMの仕組みのメリットとデメリット
Javaは、実行環境が特徴的で、中間コードをJVMが再度変換するということを行います。
また、JVMがそれぞれのOSに合うような機械語に翻訳してくれるので、
「一つのプログラムがOSに依存せずに動作する」
という特徴を持っています。
マルチプラットフォーム:OSに依存せずに動作する
JVMの仕組みのおかげで、JavaのプログラムはOSに依存しないというメリットがあります。
これが一番大きなメリットといえるでしょう。
「OSに依存しない」というのは、
WindowsでもMac OSでもLinuxでも動作するということです。
この特徴のことを、
「マルチプラットフォーム」
「クロスプラットフォーム」
と呼んだりもします。
つまり、いろんなプラットフォーム(OSなどの環境)に対応しているという意味ですね。
では、なぜOSに依存せずに動作するのでしょうか?
それは、同じJavaプログラムから生成された中間コードでも、JVMがOSに合わせて出力コードを変えるからなんです。
例えば、Windowsさん、macさん、Linuxさんに
「今から100万円を稼いできてください」と命令したとしましょう。
そうすると、
- Windowsさんは、アルバイトをして100万円を稼ぐ
- macさんは、ネットビジネスで100万円を稼ぐ
- Linuxさんは、宝くじを当てて100万円を稼ぐ
こうなるかもしれません。
それぞれが「100万円を稼ぐ」という命令を「自分ができる行動」に変換したのです。
これをJVMの話に戻すと、
System.out.prinln("Hello, World!!")
というJavaプログラムが生成した中間コードに対して、
- Windows用のJVMは、WindowsOSが実行できるような機械語に変換
- mac用のJVMは、macOSが実行できるような機械語に変換
- Linux用のJVMは、LinuxOSが実行できるような機械語に変換
という風にJVMがそれぞれのOSに適した機械語を出力しているのです。
このことからわかるように、Javaの開発環境はOSを考えてプログラミングすることが少なくなるようにできています。
実行速度が若干遅い、メモリを使う
C,C++などの完全なコンパイラ型の言語に比べると実行速度やメモリの面で性能が劣ります。
しかし、処理速度の面でもメモリの面でも現代のコンピュータは進化を遂げていて、いまでは気にならないほどになりました。
よほどの実行速度や省メモリ化を目指す開発でない限り、この面は気にする必要はないでしょう。
JVM言語とは?
JVM環境は、Javaのために作られた環境ですが、そのJVM環境を利用できるプログラミング言語が多数存在しています。
それらのことをJVM言語といいます。
つまり、JVM言語とは、JVM環境で動くプログラミング言語になります。
Javaが生み出すような中間コードを生成できるわけですね。
現在Android開発で大注目されているプログラミング言語「Kotlin」などがJVM言語として有名です。
Java
もちろんのことJavaもJVMで動作するためJVM言語といえます。
ですが、JVMが作られたのはJavaのためなのでちょっと違うかもしれません。
ここではJVMで動作するという点で上げておきます。
Scala
オブジェクト指向と関数型プログラミングを統合したプログラミング言語です。
JVM言語のひとつです。
Kotlin
2011年にAndroidの公式言語としてGoogleが発表したプログラミング言語です。
主にAndroidアプリを開発するときに使用されます。
Groovy
Groovy(グルービー)は、JVM上で動作する動的プログラミング言語です。
Jython
PythonのJVM版です。JVM環境で使えるようにしたよって。
JRuby
RubyのJVM版です。
ほかにもいろいろあります。
さらに詳しく言語について知りたい方へ
以上、「JVMとは?Javaの実行環境の仕組みを図でわかりやすく解説!」でした。