Yahoo知恵袋を見ていると、Javaでゲームを作りたいんだけどどうすればいい?、といった質問を見かけました。
それに対する回答で、ゲームは3Dオブジェクトを大量に処理する必要があるため、よりハード仕様(OS仕様)に依存させたプログラミングを行う必要があるよ、という回答がされていました。
その中でも「JavaはOSに依存させない」と言う一文に興味を惹かれたので、そこについて今日は調べてみようと思います。
OSに依存するとは?
「OSに依存している」とは、OSによって動作が異なる状態を指し、「OSに依存しない」とは、どのOSでも同じように動作する状態のことを指します。
では、なぜJavaはOSに依存しないと言われているのか。
結論
Javaは、JVWと呼ばれる仮想マシンが各OSの違いを吸収する役割を果たしているから。
プログラミング言語は「コンパイラ方式」と「インタプリタ方式」の2種類に分かれます。
コンパイラ方式の代表がC++やJavaといった言語で、こちらは実行前にソースコードをコンピュータが理解できる機械語に変換する必要があります。
ソースコードを事前に機械語に変換するため、処理が早く、実行前にエラーを検知できるのが強みですが、実行環境となるOSが事前に決まってしまう弱点を抱えています。
対して、インタプリタ方式はPythonやJavaScript、PHPなどがあり、こちらはソースコードを機械語に変換しつつ実行する仕組みです。
そのため、実行時にOSに対応する機械語に変換できる強みがありますが、処理が遅く、実行しないとエラーを検知できない弱点を抱えています。
つまり、お互いがまったく正反対のメリット/デメリットを抱えており、これを融合した良いとこ取りはできないかと考えた結果、生まれたのが「Java」です。
その結果
事前にバイトコード(コンピュータが理解できる0と1の羅列)に変換するので、実行前にエラーを検知できる
これらが実現できる「Java」と言う言語が誕生しました。
以上が「JavaがOSに依存しない」と言われている理由です。
因みに
JVMはJREと呼ばれるJavaで作成されたプログラムを実行するためのソフトウェアの中にあります。
JREはJava実行環境やJavaランタイムとも呼ばれ、実際にはJREを各OSにインストールすることでJavaアプリケーションが実行できる環境を構築できます。
そしてそのJREすらもJDKと言うJavaで開発するためのプログラムセット(Java開発環境)に含まれています。
これらはJavaのバージョンに合わせて番号が振られており、「JRE8」や「JDK13」のようになっています。
以上です。
あとがき
勉強のために文字を書く、と言うより記事を書くためにサイトを読んでいる傾向が強くなっている気がするので、今度からは少し箇条書きか、もしくは頭の整理という用途での書き方に移行してみようと思います。
飽くまでこのブログは勉強を継続するために執筆しているため、きっと書く時間よりも読む時間を増やした方が時短になりそうです。
次回は「JVM」について掘り下げてみます。