JVMはJavaプログラムを実行するために必要な仮想マシンです。JVMのおかげでJavaは様々なプラットフォームにおいても動作することができます。この記事ではJVMを理解するために初心者でも分かる構成、特徴、基礎知識などを簡単に解説していきます。
JVM(ジェイブイエム)とはJavaプログラムを実行するために必要な仮想マシンです。Java Virtual Machineの頭文字を取った略称となっております。日本語訳をすると『Java仮想マシン』となります。Javaバイトコードとして定義された命令セットを実行するスタック型の仮想マシンのことです。JVMには大きく分けてNEW領域、OLD領域、Permanent領域の3つが存在します。JavaはJVMが動作する環境でしか利用することができません。
JavaとはOracle社が開発・提供するオブジェクト指向のプログラミング言語です。1995年にサン・マイクロシステムズ(後にOracle社が買収)のジェームス・ゴブリン氏によって開発されリリースとなりました。プログラミング言語の発展に大きな影響をもたらしたC言語を元に開発されたことでも有名です。当時、最も人気を集めていたC言語はオブジェクト指向ではありませんでした。Javaの登場によってオブジェクト指向が主流の時代が訪れたと言われております。
Javaのキャッチコピーは「Write once, run anywhere」で直訳すると「一度書けば、どこでも実行できる」という意味があります。このことからも分かるようにJavaの特徴は『オブジェクト指向の先駆者』で『どこでも動く』ということらが挙げられます。世界中で最もポピュラーで多くのWebアプリケーションで採用されていることで知られております。
JVMの構成要素を見ていきましょう。
NEW領域とは新規作成されたオブジェクトの中でも若いものが格納される領域です。またNEW領域はさらに「Eden」「Survivor」の2つに分けられます。
OLD領域とは長期間使用されたオブジェクトが格納される領域です。NEW領域に格納された中で使用期間が長いものが管理されます。OLD世代領域に存在する不要となったJavaオブジェクトは、FullGC処理によって回収されます。
Permanent領域とはクラスやメソッドなど情報が格納される領域です。JSPを使用する場合などもPermanent領域が利用されます。
JVMの特徴を見ていきましょう。
JavaはJVM無しでは実行できないという特徴があります。JVMが動作する、ある程度リッチ環境でなければ利用できません。コンピュータの中にはJVMに非対応のプラットフォームが存在し、その場合にはJVM上でしか動かすことの出来ないJavaは利用することができません。
JVMは自由度の高いプログラム実行環境であるという特徴があります。JVMがJavaプログラムを様々なプラットフォームで実行可能な形式に変換する方法をとっています。これをクロスプラットフォームと呼びます。これによってWindowsやLinux、MacなどのOSやデバイスを問わずJavaを実行することが出来るのです。
JVMはJava以外の言語でも使用できるという特徴があります。JVM上で実行することの出来るプログラミング言語をJVM言語と呼びます。
JVM環境を使用できる言語を見ていきましょう。
Scalaとは2001年に設計されたJavaに影響を受けたオブジェクト指向と関数型言語の特徴を統合したプログラミング言語です。世に公開がされたのは2004年始めの頃でJavaプラットフォームにリリースされました。ScalaはJVM上で動作するため、Javaのライブラリを不自由なく使えるという特徴があります。他にも.NET Framework上でも動作するため、同様に.NETライブラリも使用することが出来ます。日本国内でも様々な有名サービスがScalaを用いた開発を行っており、代表的なものとして『SmartNews』『Chatwork』などが挙げられます。
Kotlinとは2011年に開発されたJVM上で動作する静的型付けのオブジェクト指向のプログラミング言語です。KotlinはJavaをもっと簡潔・安全になるようにという目的の元に開発されました。Kotlinが大きな注目を集めるキッカケとなったのが2017年にGoogleが発表したAndroid公式開発言語への追加です。AndroidアプリはこれまでJavaで開発するのが基本とされておりましたが、Kotlinの登場によってより簡単にAndroidアプリの開発が実現できるようになりました。Kotlinの特徴は『オブジェクト指向』『Javaを簡潔化した言語』『JVM上で動作する』などが挙げられます。
GroovyとはJavaプラットフォーム上で動作するJavaから派生したプログラミング言語です。Rubyからの影響も受けており、機能や概念はRubyライクとなっております。RubyライクなJava版スクリプト言語というのがしっくりきます。Groovyは動的プログラミング言語ですので直接スクリプトを実行することができます。Javaの文法を大きく簡易化しているためJavaユーザーは学習コストを抑えて習得することができるでしょう。特徴として『JVMで動作する』『高度なJava補完機能』『文法が簡単』などが挙げられます。
JVMを理解するために初心者でも分かる構成、特徴、基礎知識などを簡単に解説させていただきました。JVMを一言で表すと『Javaプログラムを実行するために必要な仮想マシン』です。特徴として「自由度の高いプログラム実行環境」「Java以外の言語でも使用できる」などが挙げられます。JVMについてこの記事に記載されている最低限の内容は理解をしておくようにしましょう。